From f7b396601feea4df681ece3235c5857873b374a7 Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Sun, 18 Nov 2018 23:15:32 +0100 Subject: [PATCH] Cleanup --- barrel.mem | 43 - decode.mem | 43 - picorv32_firmware/Makefile | 179 - picorv32_firmware/firmware/README | 2 - picorv32_firmware/firmware/custom_ops.S | 102 - picorv32_firmware/firmware/firmware.elf | Bin 62724 -> 0 bytes picorv32_firmware/firmware/firmware.h | 36 - picorv32_firmware/firmware/firmware.hex | 16384 --------------------- picorv32_firmware/firmware/irq.c | 140 - picorv32_firmware/firmware/irq.o | Bin 5892 -> 0 bytes picorv32_firmware/firmware/makehex.py | 27 - picorv32_firmware/firmware/multest.c | 85 - picorv32_firmware/firmware/print.c | 41 - picorv32_firmware/firmware/print.o | Bin 1428 -> 0 bytes picorv32_firmware/firmware/riscv.ld | 200 - picorv32_firmware/firmware/riscv.ld.orig | 236 - picorv32_firmware/firmware/sections.lds | 24 - picorv32_firmware/firmware/sieve.c | 84 - picorv32_firmware/firmware/sieve.o | Bin 3328 -> 0 bytes picorv32_firmware/firmware/start.S | 507 - picorv32_firmware/firmware/stats.c | 42 - picorv32_firmware/firmware/stats.o | Bin 2388 -> 0 bytes picorv32_firmware/tests/LICENSE | 24 - picorv32_firmware/tests/README | 1 - picorv32_firmware/tests/add.S | 85 - picorv32_firmware/tests/add.o | Bin 3972 -> 0 bytes picorv32_firmware/tests/addi.S | 71 - picorv32_firmware/tests/addi.o | Bin 2600 -> 0 bytes picorv32_firmware/tests/and.S | 69 - picorv32_firmware/tests/and.o | Bin 3536 -> 0 bytes picorv32_firmware/tests/andi.S | 55 - picorv32_firmware/tests/andi.o | Bin 2004 -> 0 bytes picorv32_firmware/tests/auipc.S | 39 - picorv32_firmware/tests/auipc.o | Bin 1268 -> 0 bytes picorv32_firmware/tests/beq.S | 73 - picorv32_firmware/tests/beq.o | Bin 3416 -> 0 bytes picorv32_firmware/tests/bge.S | 76 - picorv32_firmware/tests/bge.o | Bin 3968 -> 0 bytes picorv32_firmware/tests/bgeu.S | 76 - picorv32_firmware/tests/bgeu.o | Bin 4024 -> 0 bytes picorv32_firmware/tests/blt.S | 73 - picorv32_firmware/tests/blt.o | Bin 3416 -> 0 bytes picorv32_firmware/tests/bltu.S | 73 - picorv32_firmware/tests/bltu.o | Bin 3476 -> 0 bytes picorv32_firmware/tests/bne.S | 73 - picorv32_firmware/tests/bne.o | Bin 3456 -> 0 bytes picorv32_firmware/tests/div.S.ignore | 41 - picorv32_firmware/tests/divu.S.ignore | 41 - picorv32_firmware/tests/j.S | 49 - picorv32_firmware/tests/j.o | Bin 1056 -> 0 bytes picorv32_firmware/tests/jal.S | 60 - picorv32_firmware/tests/jal.o | Bin 1224 -> 0 bytes picorv32_firmware/tests/jalr.S | 88 - picorv32_firmware/tests/jalr.o | Bin 2128 -> 0 bytes picorv32_firmware/tests/lb.S | 92 - picorv32_firmware/tests/lb.o | Bin 3584 -> 0 bytes picorv32_firmware/tests/lbu.S | 92 - picorv32_firmware/tests/lbu.o | Bin 3588 -> 0 bytes picorv32_firmware/tests/lh.S | 92 - picorv32_firmware/tests/lh.o | Bin 3620 -> 0 bytes picorv32_firmware/tests/lhu.S | 92 - picorv32_firmware/tests/lhu.o | Bin 3644 -> 0 bytes picorv32_firmware/tests/lui.S | 36 - picorv32_firmware/tests/lui.o | Bin 1156 -> 0 bytes picorv32_firmware/tests/lw.S | 92 - picorv32_firmware/tests/lw.o | Bin 3660 -> 0 bytes picorv32_firmware/tests/mul.S.ignore | 84 - picorv32_firmware/tests/mulh.S.ignore | 81 - picorv32_firmware/tests/mulhsu.S.ignore | 83 - picorv32_firmware/tests/mulhu.S.ignore | 82 - picorv32_firmware/tests/or.S | 69 - picorv32_firmware/tests/or.o | Bin 3548 -> 0 bytes picorv32_firmware/tests/ori.S | 55 - picorv32_firmware/tests/ori.o | Bin 2024 -> 0 bytes picorv32_firmware/tests/rem.S.ignore | 41 - picorv32_firmware/tests/remu.S.ignore | 41 - picorv32_firmware/tests/riscv_test.h | 64 - picorv32_firmware/tests/sb.S | 96 - picorv32_firmware/tests/sb.o | Bin 4884 -> 0 bytes picorv32_firmware/tests/sh.S | 96 - picorv32_firmware/tests/sh.o | Bin 5024 -> 0 bytes picorv32_firmware/tests/simple.S | 27 - picorv32_firmware/tests/simple.o | Bin 792 -> 0 bytes picorv32_firmware/tests/sll.S | 90 - picorv32_firmware/tests/sll.o | Bin 4292 -> 0 bytes picorv32_firmware/tests/slli.S | 68 - picorv32_firmware/tests/slli.o | Bin 2596 -> 0 bytes picorv32_firmware/tests/slt.S | 84 - picorv32_firmware/tests/slt.o | Bin 3948 -> 0 bytes picorv32_firmware/tests/slti.S | 70 - picorv32_firmware/tests/slti.o | Bin 2580 -> 0 bytes picorv32_firmware/tests/sra.S | 90 - picorv32_firmware/tests/sra.o | Bin 4340 -> 0 bytes picorv32_firmware/tests/srai.S | 68 - picorv32_firmware/tests/srai.o | Bin 2648 -> 0 bytes picorv32_firmware/tests/srl.S | 90 - picorv32_firmware/tests/srl.o | Bin 4372 -> 0 bytes picorv32_firmware/tests/srli.S | 69 - picorv32_firmware/tests/srli.o | Bin 2644 -> 0 bytes picorv32_firmware/tests/sub.S | 83 - picorv32_firmware/tests/sub.o | Bin 3904 -> 0 bytes picorv32_firmware/tests/sw.S | 92 - picorv32_firmware/tests/sw.o | Bin 4992 -> 0 bytes picorv32_firmware/tests/test_macros.h | 585 - picorv32_firmware/tests/xor.S | 69 - picorv32_firmware/tests/xor.o | Bin 3544 -> 0 bytes picorv32_firmware/tests/xori.S | 55 - picorv32_firmware/tests/xori.o | Bin 2040 -> 0 bytes ser_add_tb.v | 78 - 109 files changed, 22148 deletions(-) delete mode 100644 barrel.mem delete mode 100644 decode.mem delete mode 100644 picorv32_firmware/Makefile delete mode 100644 picorv32_firmware/firmware/README delete mode 100644 picorv32_firmware/firmware/custom_ops.S delete mode 100644 picorv32_firmware/firmware/firmware.elf delete mode 100644 picorv32_firmware/firmware/firmware.h delete mode 100644 picorv32_firmware/firmware/firmware.hex delete mode 100644 picorv32_firmware/firmware/irq.c delete mode 100644 picorv32_firmware/firmware/irq.o delete mode 100644 picorv32_firmware/firmware/makehex.py delete mode 100644 picorv32_firmware/firmware/multest.c delete mode 100644 picorv32_firmware/firmware/print.c delete mode 100644 picorv32_firmware/firmware/print.o delete mode 100644 picorv32_firmware/firmware/riscv.ld delete mode 100644 picorv32_firmware/firmware/riscv.ld.orig delete mode 100644 picorv32_firmware/firmware/sections.lds delete mode 100644 picorv32_firmware/firmware/sieve.c delete mode 100644 picorv32_firmware/firmware/sieve.o delete mode 100644 picorv32_firmware/firmware/start.S delete mode 100644 picorv32_firmware/firmware/stats.c delete mode 100644 picorv32_firmware/firmware/stats.o delete mode 100644 picorv32_firmware/tests/LICENSE delete mode 100644 picorv32_firmware/tests/README delete mode 100644 picorv32_firmware/tests/add.S delete mode 100644 picorv32_firmware/tests/add.o delete mode 100644 picorv32_firmware/tests/addi.S delete mode 100644 picorv32_firmware/tests/addi.o delete mode 100644 picorv32_firmware/tests/and.S delete mode 100644 picorv32_firmware/tests/and.o delete mode 100644 picorv32_firmware/tests/andi.S delete mode 100644 picorv32_firmware/tests/andi.o delete mode 100644 picorv32_firmware/tests/auipc.S delete mode 100644 picorv32_firmware/tests/auipc.o delete mode 100644 picorv32_firmware/tests/beq.S delete mode 100644 picorv32_firmware/tests/beq.o delete mode 100644 picorv32_firmware/tests/bge.S delete mode 100644 picorv32_firmware/tests/bge.o delete mode 100644 picorv32_firmware/tests/bgeu.S delete mode 100644 picorv32_firmware/tests/bgeu.o delete mode 100644 picorv32_firmware/tests/blt.S delete mode 100644 picorv32_firmware/tests/blt.o delete mode 100644 picorv32_firmware/tests/bltu.S delete mode 100644 picorv32_firmware/tests/bltu.o delete mode 100644 picorv32_firmware/tests/bne.S delete mode 100644 picorv32_firmware/tests/bne.o delete mode 100644 picorv32_firmware/tests/div.S.ignore delete mode 100644 picorv32_firmware/tests/divu.S.ignore delete mode 100644 picorv32_firmware/tests/j.S delete mode 100644 picorv32_firmware/tests/j.o delete mode 100644 picorv32_firmware/tests/jal.S delete mode 100644 picorv32_firmware/tests/jal.o delete mode 100644 picorv32_firmware/tests/jalr.S delete mode 100644 picorv32_firmware/tests/jalr.o delete mode 100644 picorv32_firmware/tests/lb.S delete mode 100644 picorv32_firmware/tests/lb.o delete mode 100644 picorv32_firmware/tests/lbu.S delete mode 100644 picorv32_firmware/tests/lbu.o delete mode 100644 picorv32_firmware/tests/lh.S delete mode 100644 picorv32_firmware/tests/lh.o delete mode 100644 picorv32_firmware/tests/lhu.S delete mode 100644 picorv32_firmware/tests/lhu.o delete mode 100644 picorv32_firmware/tests/lui.S delete mode 100644 picorv32_firmware/tests/lui.o delete mode 100644 picorv32_firmware/tests/lw.S delete mode 100644 picorv32_firmware/tests/lw.o delete mode 100644 picorv32_firmware/tests/mul.S.ignore delete mode 100644 picorv32_firmware/tests/mulh.S.ignore delete mode 100644 picorv32_firmware/tests/mulhsu.S.ignore delete mode 100644 picorv32_firmware/tests/mulhu.S.ignore delete mode 100644 picorv32_firmware/tests/or.S delete mode 100644 picorv32_firmware/tests/or.o delete mode 100644 picorv32_firmware/tests/ori.S delete mode 100644 picorv32_firmware/tests/ori.o delete mode 100644 picorv32_firmware/tests/rem.S.ignore delete mode 100644 picorv32_firmware/tests/remu.S.ignore delete mode 100644 picorv32_firmware/tests/riscv_test.h delete mode 100644 picorv32_firmware/tests/sb.S delete mode 100644 picorv32_firmware/tests/sb.o delete mode 100644 picorv32_firmware/tests/sh.S delete mode 100644 picorv32_firmware/tests/sh.o delete mode 100644 picorv32_firmware/tests/simple.S delete mode 100644 picorv32_firmware/tests/simple.o delete mode 100644 picorv32_firmware/tests/sll.S delete mode 100644 picorv32_firmware/tests/sll.o delete mode 100644 picorv32_firmware/tests/slli.S delete mode 100644 picorv32_firmware/tests/slli.o delete mode 100644 picorv32_firmware/tests/slt.S delete mode 100644 picorv32_firmware/tests/slt.o delete mode 100644 picorv32_firmware/tests/slti.S delete mode 100644 picorv32_firmware/tests/slti.o delete mode 100644 picorv32_firmware/tests/sra.S delete mode 100644 picorv32_firmware/tests/sra.o delete mode 100644 picorv32_firmware/tests/srai.S delete mode 100644 picorv32_firmware/tests/srai.o delete mode 100644 picorv32_firmware/tests/srl.S delete mode 100644 picorv32_firmware/tests/srl.o delete mode 100644 picorv32_firmware/tests/srli.S delete mode 100644 picorv32_firmware/tests/srli.o delete mode 100644 picorv32_firmware/tests/sub.S delete mode 100644 picorv32_firmware/tests/sub.o delete mode 100644 picorv32_firmware/tests/sw.S delete mode 100644 picorv32_firmware/tests/sw.o delete mode 100644 picorv32_firmware/tests/test_macros.h delete mode 100644 picorv32_firmware/tests/xor.S delete mode 100644 picorv32_firmware/tests/xor.o delete mode 100644 picorv32_firmware/tests/xori.S delete mode 100644 picorv32_firmware/tests/xori.o delete mode 100644 ser_add_tb.v diff --git a/barrel.mem b/barrel.mem deleted file mode 100644 index af9e6b0..0000000 --- a/barrel.mem +++ /dev/null @@ -1,43 +0,0 @@ -/* -8 imm_31_12 -7 imm_11_0 -6 rd -5 rs2 -4 rs1 -3 funct3 -2 funct7 -1 opcode -0 halt -*/ -000000001 -000000000 -000000010 -000000010 -000000010 -000000010 -000000010 -001000000 -001000000 -001000000 -001000000 -001000000 -100001000 -100001000 -100001000 -100010000 -100010000 -100010000 -100010000 -100010000 -110100000 -110100000 -110100000 -110100000 -110100000 -110000100 -110000100 -110000100 -110000100 -110000100 -110000100 -110000100 diff --git a/decode.mem b/decode.mem deleted file mode 100644 index af9e6b0..0000000 --- a/decode.mem +++ /dev/null @@ -1,43 +0,0 @@ -/* -8 imm_31_12 -7 imm_11_0 -6 rd -5 rs2 -4 rs1 -3 funct3 -2 funct7 -1 opcode -0 halt -*/ -000000001 -000000000 -000000010 -000000010 -000000010 -000000010 -000000010 -001000000 -001000000 -001000000 -001000000 -001000000 -100001000 -100001000 -100001000 -100010000 -100010000 -100010000 -100010000 -100010000 -110100000 -110100000 -110100000 -110100000 -110100000 -110000100 -110000100 -110000100 -110000100 -110000100 -110000100 -110000100 diff --git a/picorv32_firmware/Makefile b/picorv32_firmware/Makefile deleted file mode 100644 index db0a301..0000000 --- a/picorv32_firmware/Makefile +++ /dev/null @@ -1,179 +0,0 @@ - -RISCV_GNU_TOOLCHAIN_GIT_REVISION = c3ad555 -RISCV_GNU_TOOLCHAIN_INSTALL_PREFIX = /opt/riscv32 - -SHELL = bash -TEST_OBJS = $(addsuffix .o,$(basename $(wildcard tests/*.S))) -FIRMWARE_OBJS = firmware/start.o firmware/irq.o firmware/print.o firmware/sieve.o firmware/multest.o firmware/stats.o -GCC_WARNS = -Werror -Wall -Wextra -Wshadow -Wundef -Wpointer-arith -Wcast-qual -Wcast-align -Wwrite-strings -GCC_WARNS += -Wredundant-decls -Wstrict-prototypes -Wmissing-prototypes -pedantic # -Wconversion -TOOLCHAIN_PREFIX = $(RISCV_GNU_TOOLCHAIN_INSTALL_PREFIX)i/bin/riscv32-unknown-elf- - -# Add things like "export http_proxy=... https_proxy=..." here -GIT_ENV = true - -test: testbench.vvp firmware/firmware.hex - vvp -N $< - -test_vcd: testbench.vvp firmware/firmware.hex - vvp -N $< +vcd +trace +noerror - -test_rvf: testbench_rvf.vvp firmware/firmware.hex - vvp -N $< +vcd +trace +noerror - -test_wb: testbench_wb.vvp firmware/firmware.hex - vvp -N $< - -test_wb_vcd: testbench_wb.vvp firmware/firmware.hex - vvp -N $< +vcd +trace +noerror - -test_ez: testbench_ez.vvp - vvp -N $< - -test_ez_vcd: testbench_ez.vvp - vvp -N $< +vcd - -test_sp: testbench_sp.vvp firmware/firmware.hex - vvp -N $< - -test_axi: testbench.vvp firmware/firmware.hex - vvp -N $< +axi_test - -test_synth: testbench_synth.vvp firmware/firmware.hex - vvp -N $< - -test_verilator: testbench_verilator firmware/firmware.hex - ./testbench_verilator - -testbench.vvp: testbench.v picorv32.v - iverilog -o $@ $(subst C,-DCOMPRESSED_ISA,$(COMPRESSED_ISA)) $^ - chmod -x $@ - -testbench_rvf.vvp: testbench.v picorv32.v rvfimon.v - iverilog -o $@ -D RISCV_FORMAL $(subst C,-DCOMPRESSED_ISA,$(COMPRESSED_ISA)) $^ - chmod -x $@ - -testbench_wb.vvp: testbench_wb.v picorv32.v - iverilog -o $@ $(subst C,-DCOMPRESSED_ISA,$(COMPRESSED_ISA)) $^ - chmod -x $@ - -testbench_ez.vvp: testbench_ez.v picorv32.v - iverilog -o $@ $(subst C,-DCOMPRESSED_ISA,$(COMPRESSED_ISA)) $^ - chmod -x $@ - -testbench_sp.vvp: testbench.v picorv32.v - iverilog -o $@ $(subst C,-DCOMPRESSED_ISA,$(COMPRESSED_ISA)) -DSP_TEST $^ - chmod -x $@ - -testbench_synth.vvp: testbench.v synth.v - iverilog -o $@ -DSYNTH_TEST $^ - chmod -x $@ - -testbench_verilator: testbench.v picorv32.v - verilator --cc --exe -Wno-lint -trace --top-module picorv32_wrapper testbench.v picorv32.v testbench.cc \ - $(subst C,-DCOMPRESSED_ISA,$(COMPRESSED_ISA)) --Mdir testbench_verilator_dir - $(MAKE) -C testbench_verilator_dir -f Vpicorv32_wrapper.mk - cp testbench_verilator_dir/Vpicorv32_wrapper testbench_verilator - -check: check-yices - -check-%: check.smt2 - yosys-smtbmc -s $(subst check-,,$@) -t 30 --dump-vcd check.vcd check.smt2 - yosys-smtbmc -s $(subst check-,,$@) -t 25 --dump-vcd check.vcd -i check.smt2 - -check.smt2: picorv32.v - yosys -v2 -p 'read_verilog -formal picorv32.v' \ - -p 'prep -top picorv32 -nordff' \ - -p 'assertpmux -noinit; opt -fast' \ - -p 'write_smt2 -wires check.smt2' - -synth.v: picorv32.v scripts/yosys/synth_sim.ys - yosys -qv3 -l synth.log scripts/yosys/synth_sim.ys - -firmware/firmware.hex: firmware/firmware.bin firmware/makehex.py - python3 firmware/makehex.py $< 16384 > $@ - -firmware/firmware.bin: firmware/firmware.elf - $(TOOLCHAIN_PREFIX)objcopy -O binary $< $@ - chmod -x $@ - -firmware/firmware.elf: $(FIRMWARE_OBJS) $(TEST_OBJS) firmware/sections.lds - $(TOOLCHAIN_PREFIX)gcc -Os -ffreestanding -nostdlib -o $@ \ - -Wl,-Bstatic,-T,firmware/sections.lds,-Map,firmware/firmware.map,--strip-debug \ - $(FIRMWARE_OBJS) $(TEST_OBJS) -lgcc - chmod -x $@ - -firmware/start.o: firmware/start.S - $(TOOLCHAIN_PREFIX)gcc -c -march=rv32i$(subst C,c,$(COMPRESSED_ISA)) -o $@ $< - -firmware/%.o: firmware/%.c - $(TOOLCHAIN_PREFIX)gcc -c -march=rv32i$(subst C,c,$(COMPRESSED_ISA)) -Os --std=c99 $(GCC_WARNS) -ffreestanding -nostdlib -o $@ $< - -tests/%.o: tests/%.S tests/riscv_test.h tests/test_macros.h - $(TOOLCHAIN_PREFIX)gcc -c -march=rv32i -o $@ -DTEST_FUNC_NAME=$(notdir $(basename $<)) \ - -DTEST_FUNC_TXT='"$(notdir $(basename $<))"' -DTEST_FUNC_RET=$(notdir $(basename $<))_ret $< - -download-tools: - sudo bash -c 'set -ex; mkdir -p /var/cache/distfiles; $(GIT_ENV); \ - $(foreach REPO,riscv-gnu-toolchain riscv-binutils-gdb riscv-dejagnu riscv-gcc riscv-glibc riscv-newlib riscv-qemu, \ - if ! test -d /var/cache/distfiles/$(REPO).git; then rm -rf /var/cache/distfiles/$(REPO).git.part; \ - git clone --bare https://github.com/riscv/$(REPO) /var/cache/distfiles/$(REPO).git.part; \ - mv /var/cache/distfiles/$(REPO).git.part /var/cache/distfiles/$(REPO).git; else \ - (cd /var/cache/distfiles/$(REPO).git; git fetch https://github.com/riscv/$(REPO)); fi;)' - -define build_tools_template -build-$(1)-tools: - @read -p "This will remove all existing data from $(RISCV_GNU_TOOLCHAIN_INSTALL_PREFIX)$(subst riscv32,,$(1)). Type YES to continue: " reply && [[ "$$$$reply" == [Yy][Ee][Ss] || "$$$$reply" == [Yy] ]] - sudo bash -c "set -ex; rm -rf $(RISCV_GNU_TOOLCHAIN_INSTALL_PREFIX)$(subst riscv32,,$(1)); mkdir -p $(RISCV_GNU_TOOLCHAIN_INSTALL_PREFIX)$(subst riscv32,,$(1)); chown $$$${USER}: $(RISCV_GNU_TOOLCHAIN_INSTALL_PREFIX)$(subst riscv32,,$(1))" - +$(MAKE) build-$(1)-tools-bh - -build-$(1)-tools-bh: - +set -ex; $(GIT_ENV); \ - if [ -d /var/cache/distfiles/riscv-gnu-toolchain.git ]; then reference_riscv_gnu_toolchain="--reference /var/cache/distfiles/riscv-gnu-toolchain.git"; else reference_riscv_gnu_toolchain=""; fi; \ - if [ -d /var/cache/distfiles/riscv-binutils-gdb.git ]; then reference_riscv_binutils_gdb="--reference /var/cache/distfiles/riscv-binutils-gdb.git"; else reference_riscv_binutils_gdb=""; fi; \ - if [ -d /var/cache/distfiles/riscv-dejagnu.git ]; then reference_riscv_dejagnu="--reference /var/cache/distfiles/riscv-dejagnu.git"; else reference_riscv_dejagnu=""; fi; \ - if [ -d /var/cache/distfiles/riscv-gcc.git ]; then reference_riscv_gcc="--reference /var/cache/distfiles/riscv-gcc.git"; else reference_riscv_gcc=""; fi; \ - if [ -d /var/cache/distfiles/riscv-glibc.git ]; then reference_riscv_glibc="--reference /var/cache/distfiles/riscv-glibc.git"; else reference_riscv_glibc=""; fi; \ - if [ -d /var/cache/distfiles/riscv-newlib.git ]; then reference_riscv_newlib="--reference /var/cache/distfiles/riscv-newlib.git"; else reference_riscv_newlib=""; fi; \ - if [ -d /var/cache/distfiles/riscv-qemu.git ]; then reference_riscv_qemu="--reference /var/cache/distfiles/riscv-qemu.git"; else reference_riscv_qemu=""; fi; \ - rm -rf riscv-gnu-toolchain-$(1); git clone $$$$reference_riscv_gnu_toolchain https://github.com/riscv/riscv-gnu-toolchain riscv-gnu-toolchain-$(1); \ - cd riscv-gnu-toolchain-$(1); git checkout $(RISCV_GNU_TOOLCHAIN_GIT_REVISION); \ - git submodule update --init $$$$reference_riscv_binutils_gdb riscv-binutils; \ - git submodule update --init $$$$reference_riscv_binutils_gdb riscv-gdb; \ - git submodule update --init $$$$reference_riscv_dejagnu riscv-dejagnu; \ - git submodule update --init $$$$reference_riscv_gcc riscv-gcc; \ - git submodule update --init $$$$reference_riscv_glibc riscv-glibc; \ - git submodule update --init $$$$reference_riscv_newlib riscv-newlib; \ - git submodule update --init $$$$reference_riscv_qemu riscv-qemu; \ - mkdir build; cd build; ../configure --with-arch=$(2) --prefix=$(RISCV_GNU_TOOLCHAIN_INSTALL_PREFIX)$(subst riscv32,,$(1)); make - -.PHONY: build-$(1)-tools -endef - -$(eval $(call build_tools_template,riscv32i,rv32i)) -$(eval $(call build_tools_template,riscv32ic,rv32ic)) -$(eval $(call build_tools_template,riscv32im,rv32im)) -$(eval $(call build_tools_template,riscv32imc,rv32imc)) - -build-tools: - @echo "This will remove all existing data from $(RISCV_GNU_TOOLCHAIN_INSTALL_PREFIX)i, $(RISCV_GNU_TOOLCHAIN_INSTALL_PREFIX)ic, $(RISCV_GNU_TOOLCHAIN_INSTALL_PREFIX)im, and $(RISCV_GNU_TOOLCHAIN_INSTALL_PREFIX)imc." - @read -p "Type YES to continue: " reply && [[ "$$reply" == [Yy][Ee][Ss] || "$$reply" == [Yy] ]] - sudo bash -c "set -ex; rm -rf $(RISCV_GNU_TOOLCHAIN_INSTALL_PREFIX){i,ic,im,imc}; mkdir -p $(RISCV_GNU_TOOLCHAIN_INSTALL_PREFIX){i,ic,im,imc}; chown $${USER}: $(RISCV_GNU_TOOLCHAIN_INSTALL_PREFIX){i,ic,im,imc}" - +$(MAKE) build-riscv32i-tools-bh - +$(MAKE) build-riscv32ic-tools-bh - +$(MAKE) build-riscv32im-tools-bh - +$(MAKE) build-riscv32imc-tools-bh - -toc: - gawk '/^-+$$/ { y=tolower(x); gsub("[^a-z0-9]+", "-", y); gsub("-$$", "", y); printf("- [%s](#%s)\n", x, y); } { x=$$0; }' README.md - -clean: - rm -rf riscv-gnu-toolchain-riscv32i riscv-gnu-toolchain-riscv32ic \ - riscv-gnu-toolchain-riscv32im riscv-gnu-toolchain-riscv32imc - rm -vrf $(FIRMWARE_OBJS) $(TEST_OBJS) check.smt2 check.vcd synth.v synth.log \ - firmware/firmware.elf firmware/firmware.bin firmware/firmware.hex firmware/firmware.map \ - testbench.vvp testbench_sp.vvp testbench_synth.vvp testbench_ez.vvp \ - testbench_rvf.vvp testbench_wb.vvp testbench.vcd testbench.trace \ - testbench_verilator testbench_verilator_dir - -.PHONY: test test_vcd test_sp test_axi test_wb test_wb_vcd test_ez test_ez_vcd test_synth download-tools build-tools toc clean diff --git a/picorv32_firmware/firmware/README b/picorv32_firmware/firmware/README deleted file mode 100644 index 2ade487..0000000 --- a/picorv32_firmware/firmware/README +++ /dev/null @@ -1,2 +0,0 @@ -A simple test firmware. This code is in the public domain. Simply copy whatever -you can use. diff --git a/picorv32_firmware/firmware/custom_ops.S b/picorv32_firmware/firmware/custom_ops.S deleted file mode 100644 index 71889b9..0000000 --- a/picorv32_firmware/firmware/custom_ops.S +++ /dev/null @@ -1,102 +0,0 @@ -// This is free and unencumbered software released into the public domain. -// -// Anyone is free to copy, modify, publish, use, compile, sell, or -// distribute this software, either in source code form or as a compiled -// binary, for any purpose, commercial or non-commercial, and by any -// means. - -#define regnum_q0 0 -#define regnum_q1 1 -#define regnum_q2 2 -#define regnum_q3 3 - -#define regnum_x0 0 -#define regnum_x1 1 -#define regnum_x2 2 -#define regnum_x3 3 -#define regnum_x4 4 -#define regnum_x5 5 -#define regnum_x6 6 -#define regnum_x7 7 -#define regnum_x8 8 -#define regnum_x9 9 -#define regnum_x10 10 -#define regnum_x11 11 -#define regnum_x12 12 -#define regnum_x13 13 -#define regnum_x14 14 -#define regnum_x15 15 -#define regnum_x16 16 -#define regnum_x17 17 -#define regnum_x18 18 -#define regnum_x19 19 -#define regnum_x20 20 -#define regnum_x21 21 -#define regnum_x22 22 -#define regnum_x23 23 -#define regnum_x24 24 -#define regnum_x25 25 -#define regnum_x26 26 -#define regnum_x27 27 -#define regnum_x28 28 -#define regnum_x29 29 -#define regnum_x30 30 -#define regnum_x31 31 - -#define regnum_zero 0 -#define regnum_ra 1 -#define regnum_sp 2 -#define regnum_gp 3 -#define regnum_tp 4 -#define regnum_t0 5 -#define regnum_t1 6 -#define regnum_t2 7 -#define regnum_s0 8 -#define regnum_s1 9 -#define regnum_a0 10 -#define regnum_a1 11 -#define regnum_a2 12 -#define regnum_a3 13 -#define regnum_a4 14 -#define regnum_a5 15 -#define regnum_a6 16 -#define regnum_a7 17 -#define regnum_s2 18 -#define regnum_s3 19 -#define regnum_s4 20 -#define regnum_s5 21 -#define regnum_s6 22 -#define regnum_s7 23 -#define regnum_s8 24 -#define regnum_s9 25 -#define regnum_s10 26 -#define regnum_s11 27 -#define regnum_t3 28 -#define regnum_t4 29 -#define regnum_t5 30 -#define regnum_t6 31 - -// x8 is s0 and also fp -#define regnum_fp 8 - -#define r_type_insn(_f7, _rs2, _rs1, _f3, _rd, _opc) \ -.word (((_f7) << 25) | ((_rs2) << 20) | ((_rs1) << 15) | ((_f3) << 12) | ((_rd) << 7) | ((_opc) << 0)) - -#define picorv32_getq_insn(_rd, _qs) \ -r_type_insn(0b0000000, 0, regnum_ ## _qs, 0b100, regnum_ ## _rd, 0b0001011) - -#define picorv32_setq_insn(_qd, _rs) \ -r_type_insn(0b0000001, 0, regnum_ ## _rs, 0b010, regnum_ ## _qd, 0b0001011) - -#define picorv32_retirq_insn() \ -r_type_insn(0b0000010, 0, 0, 0b000, 0, 0b0001011) - -#define picorv32_maskirq_insn(_rd, _rs) \ -r_type_insn(0b0000011, 0, regnum_ ## _rs, 0b110, regnum_ ## _rd, 0b0001011) - -#define picorv32_waitirq_insn(_rd) \ -r_type_insn(0b0000100, 0, 0, 0b100, regnum_ ## _rd, 0b0001011) - -#define picorv32_timer_insn(_rd, _rs) \ -r_type_insn(0b0000101, 0, regnum_ ## _rs, 0b110, regnum_ ## _rd, 0b0001011) - diff --git a/picorv32_firmware/firmware/firmware.elf b/picorv32_firmware/firmware/firmware.elf deleted file mode 100644 index 75e55694736e358d425c89f7903fa9e85e82c4b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 62724 zcmeIbeSFmAl{b7%CPM&e7#IXp3WI?H6>%VFP|*$wD{QF-i!0sQk}#meMj1$`bl0tu z1}az{9GtXLN_D8TzLa*uVjFzQdQbM2Eq19pxwWnKW_4WMmhG}Sc2Q6%dA{H4<@Y-? zN$h?;Px8qI{|f zsY*i+yBbPu?l6B8t&ZN}nbLJ^klZ~o#<^@#Ecktbf z?>$jf^Szj=c`UAKo~TzfdmB{E50l_aRn&YZT~V_qTT%19&Wf7HauqdCToa-2?VaL z3*kEy8vV6HO1-I4pUvP@BDfp6M*|hX-Es9b{hd>&6=;7X z7YOcA743WC6~XVOD%!uBs|bEi1>3(D4+bAi1=}CZ1%r>N%J#?NmBGhTmFB0+rPFM{aI;4gyll;M~fgm3&saFCb5Ut}=8 z@fR6_Z~R4u;v0Vv1a=00kzx48U*seB#$Tiw-}s9R$2b2}>gsa}YUrB!`VHRicsl6) zPN@;z?_@6Q{f>vLz2C9=^S$4x+27A9%ey;bsp?;e9UFrW;pZ0&} z{k}xgcY5W?l&@R3evnsQpHBL}Q!(#%Soy!BxmjL$tp0NEw@QD;`yH(x<^4{kLUlM3 z?&|)*%bB*f-iUl9fIJ&t{-(;;Aoqqdp?GCvP_Z&Is8AWHs;|scWmQe|NBBF0zhB_* z-|+Xg0&leI7oV-lY`Uq3^cHbAj6D8+&4t@5YoZfFH8W-gYd$ujvSw0SWzF%NY74K4U6`gdt? z@(_%J6#II$DGyD2Q{`$ikj3&u<$L&!gTE3yYOdkgG#PWyO!h5va!4R?UzMtRP^tDQ zKdsH&J4V&aI5`XD6@K}>rhGcf&r^Q+b*B8|Cub!#R*q|*GDJmAj!}{O(637L=e}R{ zwl5tD-O;a;?AJ-ve)Gq5zxKa=Le=36J`&mpU2;>qcH;M@pFwvuHFI*BN^GmD=&FK# z_tsS*gRr`lr9$=1%49f>^(4Px}-*rBMZnVXwb5vr~`zkoOn?5-& za?S;i6IYpy8xbQzDqb7;{^`ij^HG*kuZ@52l(9={wAFh$`g1Pr5&Z5?Yw>%u(K9v5 z+GPgHB8Gl1>7y)tq^&;_Wg`szI?_j4dYJLh9__9SBBmpuA*y}SyvpFTKxO;1?qKla zZNc`B&kF`G3Iy9P>aGY*Z>wmZKCdEpG1e;=cLy*wLbs)qGHq;{g7`Yex4F}80c@^@ z4rKE+#aCX7gi=+BXLeOUuR-ubFtYyb;ixkR`5tAdkoi_2@cu4w{kQ2S=o$`!KN#7x zvV#0;iVy!Gv3M6~sftJ_3Yw~jYDs7efbdl2I|QO)nLN`&7YY-0~HCLFiF>mctxbiaxZ+pr>4&_3nfD_{>5 z`TEVOHuSctU9d@I#@wV}A62{QQQ)tunn{md0b6nX9Pnc+R0m(YYhxL|C)nSc@O$|w z@cyA|jACCaGWXtGkJwOM$TOKx6!O|Ckh_D(*8$|~0P;1)>WB*Da(u51)a*HNMcp^C zJ}*xA&$^*1718UAD17_u6`7%7tRafQ$k6u!k(-ysBV(qh+Nvpm;FK!0|H1pz{*%8| ziJeu0GUtuL7``0#$Cy9oT*z8}EHiqN%6#=!_-C|Ae5I-~a_=vDGdGWkC*to{MsB`M z%i4ePx5tAOANWsWOkobi+!}4f+zFpdZ-cM4!&kfEqkSB26)3AfSw+pH zd6;LH1T#ajiaEIsdAbhYUAyqjKlqZl8#H>7~emM zY+6kIpF~1O@IB!t8H{Z`u2S&}$Pe28j)WFn1>UD3Uqz1i>QGJ3a2^9sWD|7Md=t72 z-zz`Xd|c;Z92&mdSfB6Vr>(pvOZm|ERD870H{qa_w=c5kYnNxXyxR-?_Pv%K@&@7| zh`0zMCW45GAY!5dF;Rh-s6b3qASMDq_yRdUfSeyd&ZoaBJ-^Xs(l_*@=O6T^N(B?6 zxYj`~9vV=QcTW!2^X7dE0+Ef#oevGE*njU%jEUl)OeJ`R6e<$q=Z8K>FW0`wl|z_6 z&&3`)Sd-d=e9Ac&{z%1#XSnv-I10J&;dg6N%=ydDv|o3kH?iYE)qdUUy@`$ok#i^Y zGG_-D(3cY)1`l&dFY_hxhR&V;HA&@KCPj00oY8;Z*82~xLEvNf^-Y_XK7rrg@@ViG z;^;qZy*PexW1G5Yz4;ivvaj|lo!QfDOVINeezG4A={ zx{lCK*D0?TMmE~V`-JOaDwJ#KXY>&|>2aegjn_C)pA6GcNA?295L z`ysa{;`hJlJ&@rC-=I$Hp|U9d5&jI{n&J)LHgUG#N-xgtD~+=?>&jwG1?cl)-H74C zBZ0Sy`(KT!uIeyj4e=DE4L<4oUiVh9hR)ADv8 zqa;2VXPzC>Dlz`~%T4T| z1M2KzopI>tn`4f+q(6Px9{uOVukNSQHP10}QGdERJxl7cpPrrt=8!2;Pu3~vtJAf_ zwnfIzWT~sJXJf68z9qI*0mSD-sjt(s-*!v%4F?h(Js)LV$Lqz6v`>j$qXFhnUB~L@ z#zr4KOY9m8Bp&L~In-~<<^mn&*tML((`PtQT=Kw?}^aDM~x z6VCywv(O*8GdyBMCKVo0H}S#?BY}w*)*>GmdS~FQ?o zF3%<1$XRAiF!Ob~pBzdaFE7O~$M#(3?Be{qpFC!6H#u}yKRHy(aW<^y`0blRb5frM z%u)U1&=Q@Kn8QU5&4sPaQv>Hu)Gx_lj784|>4Ebn>nYe zsnt9I zTlL5DXL(&O9>W9YPg$qLuF((9pR!(wU1NVdf6BTgc8z~<{*?7f>{|cF^QWv^V%LU0 zoBl#1#;Oyql`%l~a`PxAFvt|8?lKh!b82SlqYR@&aE%6qnx_7-d@V-+6I~2*F3O8adSIEi0=R>&Nksmm(eOPnE*HrdP@|>)bTySbG|JU0aEadoZVw zewAsrlxF02l76LM-|I`t$j_0EYcQ-^)VgJ=VI%G{9_p#fDC*?wRe)Uz?7uB{{HR-9 zWdASCs66C!s{JY2J&JPVgPr->j4J5zTI~H0}Mv_6hk>rFi{79Z%TF?t(4w9e)HT5sx*Vt$+8*@U{% zzSO-$b`-p6FMn!1EN>rOJey<#SYPY4r?v_C`;+hK(nb0ri zD`>fWb*4S??B57qCTwE$DB<^XDA0a-4NBSM?W2bmBSrR4uQ`3*esuBdp(@Zny`Ojd zMt-r>-kvVu3dj#3r}Wka7{k!LI$Dt!$ud<@+ol-T71+;KVE-80uQUcvyn=gp@ZdT@ zAyBKw3T#?kUvYNUpErEZ=Fhr;@@Ml3*ioDlJ(vVesUhviH|Q6}eUxj78dILCYHxGv zw;0z7wp!w|!gZXU3oQQ`t0(x=lz*NnSAResNUJbyWSQ&67+U=OOe)*k-j<}k zsMpE%&*eIev1oY0@3NoFCu|eB0DC5TK7|~?9O?5myrX#;yPCg<^O)xm*Oni1IdiAa zAOA0p->aik;(VSx**aKrMrbo%pQ5#Uuh~mkKEz`LdDiF4{wL$s@IsF?V_NDR7QDIN zk=N&k4m)~69zXPca4lk>ZQik98_wqf^ludQiej(S6Ew88-)I`;c=Q9&oOq5LJUs_t~pLJ|+*RhSZvYeM~+~+nvBV%2UIT`EmgXDL0v@ZR|diPVo?E}Sn;DDx4PJnR}h5yf5tUq0M zDcT8zG6ThW%ev;0Sno>pnl)q(Y_bi%8S5QApEc!SwV&nB_1>e;Sa~M{U4&&zB{qT_v%}nuD=F-oH0qSfp=o9@6oMZ*dJuJUB8ey z8|`1~)17YcCD+5du-^CTsx#Vto^D~%KjG8EhVJQxyt@nQeXoAf&^_G{i@UJi_vi&f z_jHSsez{M_8eZFty47<}T<66~-o;7-)?9g8UQo5PWwnckB=bDh{jgC!4Es|~O0W4j zA9=D+hk3&r%e=m$<1mf-&+9e6j5j?_B|qjkzs)S>6|?p?b&5I$-PkT^NALMvY<6HDEI%)ZC3}Y>e>vmpWtv+tNdi^NT3G3O1-1;781kkHQ zf6qQx#j?XTaM>AJ0BmH$Tv$ zui0@A?|AuLqEm@|8Ythc^?iT!X`@7^B<+K>eNoje@nRiocDvs1!T8tf{d5J+q=WnG zHO6?zLO;FUkJpXB_y`12wHRAwtaP58HGh8i@66nB=$(P)j>bDzmd+jJXU=b7oR7zK zM}3_u%DleFU7K*{|NF^H%j@&Zx!T#Sll4uW?8i?flaJ%}&-~9`JOH@+@}XYj(0;iCtryS3dZfovd48*Er{GeNN)~ z#QwQ!VkQ14v1>j1_rcff`n2idpn>y_K0lFdns)6qyFPWDU6VX3@~_#g4f|_@vEq8& zTP{bY&9%Cu!&#mM_PthzJYe%C)(!cyu)qB09VTxs_;W9Bmfcs=vaYeueKi^QBGaSd zMz<)}tQU3h%(f>S$2^#`xpA5)OR@~>*ErY2wyc0Mu4(Hz_NHh)tgkaY#d&7^+`!yA z*_7i91a0x$*{q+FdhGZ#-DccdTR+q@(WmLQ1BRAn`+`Ot-1;QT+%dtgM?Em6xR>O; zLaDYktgXjtJ+|TZw((>2x|;V2c{J$pTrP*XVVGT0pXbx4M-cnxt7CdS&3lEsdd3!+ zZFe^4wKT4C`!r_{#n?Po>zCJkg6+asQ{~NlLfZDpcu79y`bFD4$~C7ROS*nfA^8uVuRz&h~>%;Wf89TY`P{GCy=AXQ8=0G8Xh};G^+x3;8(K>H z1J3}acumKvJ1SRW=xNNY+Gj=Z;2tON{3aUp{Dt`9{loE%ntl3xJUZCp(=ucI^4azWdAwR? zyo9%;--T$UoplQ^enOjmG|;$fT)DFUIZL1K zqpmpGc<$q;jtpcU^ivfe0(|6jVpwCQA8TpWZ%(;%4bF`k^Q?Rd! zIU3LK<>C8I*eMmzb5Vzxi*$J##;`okKz=uTQRE^s7a2a-7`m14V$5W4-B8a(`uYHL zXIpJ)Z!Rd|N1SIcZ@^apoayR$$kV~iFPMi+`-n+>W@==z?MxeVaC}-%w%x$>r=Eu> zOY5k4p@ZYqda~W5nS*c*4Do^MUnzeMN=1Wa9g#jubI?B*%~)9Q8*eO>-LJZ0)!G5( zABAVjqPW*HXXcM>n14p*Fu%m?{1JBaX?lJ!bj&YtJ5ON#G4-bi`V=$&z^9zwHbOq< zpV62{P~XfyVbIXFqm9KJqG?GhSJXQ{H_^~iRwuOS>W#}yFf{sv{$!h=r^I{$f4X_c z(do;?HZhOr9Nk$W!}&XLU->+e^Z8tRo1^~xp=IU!@aQ%-Mn`$EqjPhil+Vdai8)5| z6@5O_KYxDF{Zl$`m-Ww|FSJhKK0I2d`=Ucjb&C3YPM^(UPSLVreRypD{P{%d9WUi` z@={TMF5%eaT*7A(`; z_e8j+;L|-l{C&{_JvaDtPoID{?>x}+DWC52D%l@>(x*G!Fy_qlwnc8w;@L*-lR9ut zX7@YH3)&WPuhfAvGLPu<@fCCPCw!VZt=sl= z3zL48PY)Zqr(2ZtD}8#>(7nA}jP%QWdco42ZgJ9aEy3&`nV)>0*7HpKQrcACiy#8S0BZ;}Q2lp1iKKU@>g0@dVzPX3UlLP*e`4MB*#9f+muQ?ynZ5lgr z?3VCjOqzJi25`O8o{LdOV^_^zUI*((6Q`ZrKicy!+b`m`#YjE-r`J%pSI6V+ql;&c2KLWgSMdDON4}>^QeIPV zF)XhsuncRcw7aHYd9wXoQ?RtovvW-pQ(ZqCnnk< zK4JLO-+TH!5j}%;dwu;d&!l^oN-XWP(zW0$wqH4^I$Y&MT{B8Th3e|P>#AT?1Yuufbe~EWqkpIaO;Q#rU zCEyLrd!i;fLbXrCeI75PeA~-E#~47~v-e?~&-;?hnyxGN{a>Tr5mT@GdmI-v7qad= z+-CsVwwI6ajMJ+-*1r#`EBC~|WKy|uJ!pJ^g*|FTMJ@ZL@CdD*XH)>Oa9czKrf~)O=j`J<#Kfz_|6UwzZ?ncU_2#9!!hsm-U8r?-_8yP2ZC782_(CqUZR$Ro zb*HJ@wzVs)YBO9@m)mVfjJDh zPqy74>UM85b!#ugdQRuY8fWinlx-W&IS_kHX|JTLpK>~P#cD=!P3YPCYGB+?jr!pC z>;K80hwPkiAG)vVZi3%Kn~r#Su$TQui^FS?|!=H$!o}8{tRst{LFj zR=rl|!BM{mj`=s-3lKVVzej(A_n1}Ruk+uiU;OFMjyi8Bn!YS}X`sH`-q?&MJj?pR zGuz?lPXPT1v;}@U1ow7;hkt8Sy!t`%^I75)*7iGNAEEx_e-Qkcwt0BxgW+F;cZno+ z4#zwY*L%7#LC6ROAuovMdvbm(VLoQg=DybOT&v?p^PQio@_deYm3wNRuicx2HSegL zA75OfVXtNS(2X{`^*v4f?z^ZT&#unK`CaD?zqax8)<8a3aoeg7I5$@+@lKTI=9lVo zhco)zyjI&B{nO_ThF&Y^GfU1b41K1cV{WLoXAGWvb1rY><6OQ0bl&Gx=(X*eb9qC@ zxk=K}z53={#n5qXk^&w6=DElT=fFXU~?W2;HMz{OCBdbDQ8{Tqk}n&QWxn75d0>V<2%_oTuosYt_9@tt^2As2=F|I=qF*fXA; zalPA&>(C|MxGp=3Y`zP+$@Oxay5>fiHL`mK6JrDSqdll;*qU-(?A^-}2-#5CPW7f8= zy_CK-Y-sTzx({A^X|8)Ourdc_cwau=?ddh76VJmcf9n{fYxTc=vNkO_XJOdYEm?yK?FOY$CO)5p_Z9aqolgtG(eA?;d2 zuhGmHw{4wbJx{Nl1Kh`~+laqIoixAGNnabbvUNYqShuo&ulwNYIDO>3%;?91^AJmI zfnsns=Gs71WiV%Boq=F8 zwHy7=XFE}QJqlxaH~w^4jBznJqhcsaq73sL&l7PyiswR^-6+?5^^9ATLDp`4-3ojS z99I*OM^Y%Wb(8)*5t@(kQjF^frY^5pu`JDTXRbZ*T9Bt>mi0wB`C(tP-!j*vb~_n4 zwtt>(-^fTA-n_jYMO}IAiS-NA-&~{8eWwmZ)<0KYqw@Hae)cM(I#s4KZ~GMHnV7yW z0=$r!)$#AeF3wy`8;FgO?pjoqb~0-xdEE;0qv=25WSqG#0(J>xcBj4dU-{XYksU`| zxoc6-ZFdp#p^a~SEsFiA_wI?nx=gp7!QS5E^Ym=s^){^IU?0Bgjq$7fTJU*2J(E0B z3}&Lvjw#p&_Z7MO#ImkDeRi%#Wgk9Vw+i}&77Y08KjOY*4q%+=GvnP+8@o~Z*?)G` zD~~Zw{AX8nIqewdI6-+5a$;(~$6wDl_Md6>${Q$u0prkbmvWMnk9#rgGp(Nd6y;w_ zJ?q-2E1qffXlcgjJQvfxJn)(O_4_`{>gmx*{jM_YmCMa>oR>bw>eb6rfBzX)ue?D0 z{byJ`9gEc8e}>iLS3LW~z3c__DX;cto&Ceum*#QK+^NfJJvmXF?b>HpvtjG27}pXr zO>7!|+NNYoc(EDh+3>}N*S1MsrAqnrSs}_eKD=jGb4EwUUtWi6ADyQf#51e~zm6Mw z-k3^qoZy^=W6J1FJ+$tQ*V8-2aVnl+&3j|8gx}LU&3(OnhBa$=XCz$$?oLYwmyH(sI;et_Meom`NObbj`HpKGx8(yOo<+zJ@Pt_(jJtRQK`N< zc=jl;fA;*Dyiucfx&1tyi?p9Te>Q#7*D$2Mo@~XlZF~Ogcw<_AiQb;W2NEjoIPjnf8XTMLj%48 zpn1jml05og47#RNV|zDs_MZEzG3BY{?cH8~&05&-f4;pt%0A+L_BeCdM9Y6mdv}a- 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 a!u;w!l*12~E0S;Y3H+NfnqvOr`2Ig##izdj diff --git a/picorv32_firmware/firmware/firmware.h b/picorv32_firmware/firmware/firmware.h deleted file mode 100644 index 59b5c75..0000000 --- a/picorv32_firmware/firmware/firmware.h +++ /dev/null @@ -1,36 +0,0 @@ -// This is free and unencumbered software released into the public domain. -// -// Anyone is free to copy, modify, publish, use, compile, sell, or -// distribute this software, either in source code form or as a compiled -// binary, for any purpose, commercial or non-commercial, and by any -// means. - -#ifndef FIRMWARE_H -#define FIRMWARE_H - -#include -#include - -// irq.c -uint32_t *irq(uint32_t *regs, uint32_t irqs); - -// print.c -void print_chr(char ch); -void print_str(const char *p); -void print_dec(unsigned int val); -void print_hex(unsigned int val, int digits); - -// sieve.c -void sieve(void); - -// multest.c -uint32_t hard_mul(uint32_t a, uint32_t b); -uint32_t hard_mulh(uint32_t a, uint32_t b); -uint32_t hard_mulhsu(uint32_t a, uint32_t b); -uint32_t hard_mulhu(uint32_t a, uint32_t b); -void multest(void); - -// stats.c -void stats(void); - -#endif diff --git a/picorv32_firmware/firmware/firmware.hex b/picorv32_firmware/firmware/firmware.hex deleted file mode 100644 index b2484b6..0000000 --- a/picorv32_firmware/firmware/firmware.hex +++ /dev/null @@ -1,16384 +0,0 @@ -0800400b -0600600b -3d80006f -00000013 -0200a10b -0201218b -000000b7 -16008093 -0000410b -0020a023 -0001410b -0020a223 -0001c10b -0020a423 -0030a623 -0040a823 -0050aa23 -0060ac23 -0070ae23 -0280a023 -0290a223 -02a0a423 -02b0a623 -02c0a823 -02d0aa23 -02e0ac23 -02f0ae23 -0500a023 -0510a223 -0520a423 -0530a623 -0540a823 -0550aa23 -0560ac23 -0570ae23 -0780a023 -0790a223 -07a0a423 -07b0a623 -07c0a823 -07d0aa23 -07e0ac23 -07f0ae23 -00000137 -3e010113 -00000537 -16050513 -0000c58b -5b8000ef -00050093 -0000a103 -0201200b -0040a103 -0201208b -0080a103 -0201210b -00c0a183 -0100a203 -0140a283 -0180a303 -01c0a383 -0200a403 -0240a483 -0280a503 -02c0a583 -0300a603 -0340a683 -0380a703 -03c0a783 -0400a803 -0440a883 -0480a903 -04c0a983 -0500aa03 -0540aa83 -0580ab03 -05c0ab83 -0600ac03 -0640ac83 -0680ad03 -06c0ad83 -0700ae03 -0740ae83 -0780af03 -07c0af83 -0000c08b -0001410b -0400000b -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000093 -00000113 -00000193 -00000213 -00000293 -00000313 -00000393 -00000413 -00000493 -00000513 -00000593 -00000613 -00000693 -00000713 -00000793 -00000813 -00000893 -00000913 -00000993 -00000a13 -00000a93 -00000b13 -00000b93 -00000c13 -00000c93 -00000d13 -00000d93 -00000e13 -00000e93 -00000f13 -00000f93 -3e800093 -0a00e00b -7850506f -3e800093 -0a00e00b -0390406f -3e800093 -0a00e00b -1100806f -3e800093 -0a00e00b -10c0706f -3e800093 -0a00e00b -0e10406f -3e800093 -0a00e00b -1a50306f -3e800093 -0a00e00b -19c0806f -3e800093 -0a00e00b -0750806f -3e800093 -0a00e00b -4c80806f -3e800093 -0a00e00b -2f00306f -3e800093 -0a00e00b -21d0406f -3e800093 -0a00e00b -6710106f -3e800093 -0a00e00b -1300206f -3e800093 -0a00e00b -5d10406f -3e800093 -0a00e00b -1110506f -3e800093 -0a00e00b -3d10506f -3e800093 -0a00e00b -6fc0706f -3e800093 -0a00e00b -3650706f -3e800093 -0a00e00b -2640406f -3e800093 -0a00e00b -5f00306f -3e800093 -0a00e00b -0880506f -3e800093 -0a00e00b -3cd0006f -3e800093 -0a00e00b -2950606f -3e800093 -0a00e00b -0450606f -3e800093 -0a00e00b -5300606f -3e800093 -0a00e00b -4cd0606f -3e800093 -0a00e00b -6e90206f -3e800093 -0a00e00b -1180706f -3e800093 -0a00e00b -0650106f -3e800093 -0a00e00b -7090506f -3e800093 -0a00e00b -3080506f -3e800093 -0a00e00b -3000106f -3e800093 -0a00e00b -32c0206f -3e800093 -0a00e00b -3950306f -3e800093 -0a00e00b -5990006f -3e800093 -0a00e00b -1450206f -3e800093 -0a00e00b -0580706f -00010137 -deadc1b7 -eef18193 -00018213 -5f4000ef -23d000ef -10000537 -04400593 -04f00613 -04e00693 -04500713 -00a00793 -00b52023 -00c52023 -00d52023 -00e52023 -00f52023 -20000537 -075bd5b7 -d1558593 -00b52023 -00100073 -00000000 -00000000 -fb010113 -04912223 -05212023 -03312e23 -04112623 -04812423 -03412c23 -03512a23 -03612823 -03712623 -03812423 -03912223 -03a12023 -01b12e23 -0065f493 -00050913 -00058993 -08048863 -00052703 -00177693 -ffc70793 -00068463 -ffd70793 -0007d403 -00300713 -00347613 -00e61863 -0027d783 -01079793 -00f46433 -00347a13 -ffda0793 -00f037b3 -04d78863 -00009537 -1d450513 -354000ef -00092503 -00800593 -3e4000ef -00009537 -21050513 -33c000ef -00300793 -00800593 -00fa0463 -00400593 -00040513 -3c0000ef -00009537 -25850513 -318000ef -00100073 -0109f793 -00078a63 -00009737 -33c72783 -00178793 -32f72e23 -0209f793 -00078a63 -00009737 -33872783 -00178793 -32f72c23 -0019f793 -00078a63 -00009737 -33472783 -00178793 -32f72a23 -1c048463 -00092783 -0017f713 -ffc78a13 -00070463 -ffd78a13 -000a5483 -00300793 -0034f713 -00f71863 -002a5783 -01079793 -00f4e4b3 -00009437 -25840513 -28c000ef -00009ab7 -21ca8513 -280000ef -0029f793 -02078e63 -001007b7 -07378793 -00f48863 -000097b7 -00278793 -1af49063 -00009537 -25c50513 -254000ef -00800593 -000a0513 -2e4000ef -25840513 -240000ef -0049f993 -04098663 -00009537 -29c50513 -22c000ef -00800593 -000a0513 -2bc000ef -00009537 -29450513 -214000ef -0034f793 -00300713 -00400593 -00e79463 -00800593 -00048513 -294000ef -25840513 -1f0000ef -00009bb7 -00000a13 -00900c93 -01300d13 -00009db7 -1ccb8b93 -002a1993 -25840793 -000a0493 -013909b3 -00000b13 -01d00c13 -00f12623 -12049c63 -2bcd8513 -1b0000ef -0009a503 -00800593 -240000ef -00300793 -000b8513 -00fb1463 -00c12503 -190000ef -001b0b13 -00400793 -00848493 -02098993 -fcfb12e3 -001a0a13 -00800793 -f8fa1ee3 -21ca8513 -168000ef -00009537 -2c450513 -15c000ef -000097b7 -33c7a503 -16c000ef -25840513 -148000ef -00009537 -2ec50513 -13c000ef -000097b7 -3387a503 -14c000ef -25840513 -128000ef -00009537 -31450513 -11c000ef -000097b7 -3347a503 -12c000ef -25840513 -108000ef -00100073 -04c12083 -04812403 -00090513 -04412483 -04012903 -03c12983 -03812a03 -03412a83 -03012b03 -02c12b83 -02812c03 -02412c83 -02012d03 -01c12d83 -05010113 -00008067 -00009537 -27850513 -0b8000ef -00800593 -000a0513 -148000ef -00009537 -29450513 -0a0000ef -0034f793 -00300713 -00400593 -00e79463 -00800593 -00048513 -e3dff06f -07800513 -029cc463 -06c000ef -03048513 -0ff57513 -060000ef -02000513 -058000ef -02000513 -050000ef -eadff06f -009d4e63 -044000ef -03100513 -03c000ef -02648513 -0ff57513 -fd9ff06f -009c4c63 -028000ef -03200513 -020000ef -01c48513 -fe5ff06f -014000ef -03300513 -00c000ef -01248513 -fd1ff06f -100007b7 -00a7a023 -00008067 -10000737 -00054783 -00079463 -00008067 -00150513 -00f72023 -fedff06f -fe010113 -00812c23 -00410413 -00912a23 -01212823 -00112e23 -00050493 -00040913 -02049c63 -03240a63 -10000737 -fff40413 -00044783 -03078793 -00f72023 -ff2418e3 -01c12083 -01812403 -01412483 -01012903 -02010113 -00008067 -00a00593 -00048513 -690080ef -00140413 -fea40fa3 -00a00593 -00048513 -634080ef -00050493 -fa5ff06f -fff58593 -00009737 -00259593 -35470713 -100006b7 -0005d463 -00008067 -00b557b3 -00f7f793 -00e787b3 -0007c783 -ffc58593 -00f6a023 -fe1ff06f -ff010113 -00812423 -00912223 -00112623 -00900793 -00050413 -00058493 -00a7c863 -00009537 -36850513 -f05ff0ef -00040513 -f19ff0ef -ff640793 -00900713 -0af77263 -00a00593 -00040513 -624080ef -00200793 -06f50c63 -00300793 -06f50e63 -00100793 -08f51063 -00009537 -36c50513 -ec1ff0ef -00009537 -37c50513 -eb5ff0ef -00048513 -ec9ff0ef -00009537 -38850513 -ea1ff0ef -00009737 -3a872783 -00c12083 -00579513 -00f50533 -00854533 -00551793 -00812403 -00a78533 -00954533 -3aa72423 -00412483 -01010113 -00008067 -00009537 -37050513 -f9dff06f -00009537 -37450513 -f91ff06f -00009537 -37850513 -f85ff06f -fd010113 -000017b7 -02912223 -50578793 -00100513 -000094b7 -00200593 -02812423 -03212023 -01412c23 -01512a23 -01612823 -02112623 -01312e23 -01712623 -3af4a423 -00009937 -ed1ff0ef -80000a37 -00000413 -00200513 -3ac90913 -00100a93 -03f00b13 -01fa0a13 -40545713 -00271713 -01270733 -00072703 -008a97b3 -00e7f7b3 -06079a63 -00141993 -00398993 -00098593 -00150b93 -e85ff0ef -00241693 -00668693 -0016f793 -04078263 -ffd68713 -40175793 -04fb4063 -40675713 -00271713 -0147f7b3 -00e90633 -0007d863 -fff78793 -fe07e793 -00178793 -00e90733 -00072703 -00fa97b3 -00e7e7b3 -00f62023 -013686b3 -fb5ff06f -000b8513 -00140413 -04000793 -f6f416e3 -00009537 -38c50513 -d3dff0ef -3a84a503 -00800593 -dcdff0ef -3a84a703 -1772a7b7 -48f78793 -02f71c63 -02812403 -02c12083 -02412483 -02012903 -01c12983 -01812a03 -01412a83 -01012b03 -00c12b83 -00009537 -39850513 -03010113 -cedff06f -00009537 -3a050513 -ce1ff0ef -00100073 -02c12083 -02812403 -02412483 -02012903 -01c12983 -01812a03 -01412a83 -01012b03 -00c12b83 -03010113 -00008067 -00009737 -3d872503 -00d51793 -00a7c7b3 -0117d513 -00f547b3 -00579513 -00f54533 -3ca72c23 -00008067 -fc010113 -03212823 -03312623 -03612023 -01712e23 -01812c23 -01912a23 -01a12823 -01b12623 -02112e23 -02812c23 -02912a23 -03412423 -03512223 -00a00993 -00009db7 -00009b37 -00009d37 -00009cb7 -00009c37 -00009937 -00009bb7 -f81ff0ef -00050413 -f79ff0ef -00050493 -41f55a93 -3b4d8513 -c15ff0ef -41f45a13 -00800593 -000a0513 -ca1ff0ef -3bcb0513 -bfdff0ef -00800593 -00040513 -c8dff0ef -3c0d0513 -be9ff0ef -00800593 -000a8513 -c79ff0ef -3bcb0513 -bd5ff0ef -00800593 -00048513 -c65ff0ef -00a00513 -bb5ff0ef -3c4c8513 -bb9ff0ef -3ccc0513 -bb1ff0ef -00048593 -00040513 -1b4080ef -00800593 -c39ff0ef -3d490513 -b95ff0ef -00048613 -000a8693 -00040513 -000a0593 -1b4080ef -00058513 -00800593 -c11ff0ef -3d490513 -b6dff0ef -00048613 -00000693 -00040513 -000a0593 -18c080ef -00058513 -00800593 -be9ff0ef -3d490513 -b45ff0ef -00048613 -00000693 -00040513 -00000593 -164080ef -00058513 -00800593 -bc1ff0ef -3d490513 -b1dff0ef -398b8513 -fff98993 -b11ff0ef -ee0990e3 -03c12083 -03812403 -03412483 -03012903 -02c12983 -02812a03 -02412a83 -02012b03 -01c12b83 -01812c03 -01412c83 -01012d03 -00c12d83 -04010113 -00008067 -fc010113 -03312623 -02112e23 -02812c23 -02912a23 -03212823 -03412423 -03512223 -00050993 -03000793 -00061463 -02000793 -00010a13 -0ff7f913 -000a0493 -01458ab3 -00048413 -02099e63 -409a87b3 -06f04063 -02000493 -02e00913 -05441e63 -03c12083 -03812403 -03412483 -03012903 -02c12983 -02812a03 -02412a83 -04010113 -00008067 -00a00593 -00098513 -150080ef -03050513 -00a48023 -00098513 -00a00593 -0f4080ef -00050993 -00148493 -f99ff06f -01248023 -fe5ff06f -fff44783 -00979863 -ffe44783 -00979463 -ff240fa3 -fff40413 -00044503 -9f1ff0ef -f85ff06f -ff010113 -00112623 -00812423 -00912223 -c00024f3 -c0202473 -00009537 -3dc50513 -9d5ff0ef -00000613 -00800593 -00048513 -ef9ff0ef -00009537 -3f450513 -9b9ff0ef -00000613 -00800593 -00040513 -eddff0ef -00009537 -40c50513 -99dff0ef -00040593 -00048513 -054080ef -00000613 -00000593 -eb9ff0ef -00009537 -41450513 -979ff0ef -06400593 -00048513 -77d070ef -00040593 -028080ef -06400593 -068080ef -00100613 -00200593 -e85ff0ef -00812403 -00c12083 -00412483 -00009537 -25850513 -01010113 -935ff06f -00001537 -14c50513 -10000637 -00050583 -00058c63 -00b62023 -00150513 -ff1ff06f -69726f78 -00000000 -02e00593 -00b62023 -00b62023 -00ff10b7 -f0008093 -f0f0c193 -ff00feb7 -00fe8e93 -00200e13 -1dd19663 -0ff010b7 -ff008093 -0f00c193 -0ff01eb7 -f00e8e93 -00300e13 -1bd19863 -00ff10b7 -8ff08093 -70f0c193 -00ff1eb7 -ff0e8e93 -00400e13 -19d19a63 -f00ff0b7 -00f08093 -0f00c193 -f00ffeb7 -0ffe8e93 -00500e13 -17d19c63 -ff00f0b7 -70008093 -70f0c093 -ff00feb7 -00fe8e93 -00600e13 -15d09e63 -00000213 -0ff010b7 -ff008093 -0f00c193 -00018313 -00120213 -00200293 -fe5214e3 -0ff01eb7 -f00e8e93 -00700e13 -13d31663 -00000213 -00ff10b7 -8ff08093 -70f0c193 -00000013 -00018313 -00120213 -00200293 -fe5212e3 -00ff1eb7 -ff0e8e93 -00800e13 -0fd31c63 -00000213 -f00ff0b7 -00f08093 -0f00c193 -00000013 -00000013 -00018313 -00120213 -00200293 -fe5210e3 -f00ffeb7 -0ffe8e93 -00900e13 -0dd31063 -00000213 -0ff010b7 -ff008093 -0f00c193 -00120213 -00200293 -fe5216e3 -0ff01eb7 -f00e8e93 -00a00e13 -09d19a63 -00000213 -00ff10b7 -fff08093 -00000013 -00f0c193 -00120213 -00200293 -fe5214e3 -00ff1eb7 -ff0e8e93 -00b00e13 -07d19263 -00000213 -f00ff0b7 -00f08093 -00000013 -00000013 -0f00c193 -00120213 -00200293 -fe5212e3 -f00ffeb7 -0ffe8e93 -00c00e13 -03d19863 -0f004093 -0f000e93 -00d00e13 -03d09063 -00ff00b7 -0ff08093 -70f0c013 -00000e93 -00e00e13 -01d01463 -03c01a63 -10000537 -04500593 -05200613 -04f00693 -00a00713 -00b52023 -00c52023 -00c52023 -00d52023 -00c52023 -00e52023 -00100073 -10000537 -04f00593 -04b00613 -00a00693 -00b52023 -00c52023 -00d52023 -9d4ff06f -00001537 -3b450513 -10000637 -00050583 -00058a63 -00b62023 -00150513 -ff1ff06f -0000726f -02e00593 -00b62023 -00b62023 -ff0100b7 -f0008093 -0f0f1137 -f0f10113 -0020e1b3 -ff100eb7 -f0fe8e93 -00200e13 -4bd19263 -0ff010b7 -ff008093 -f0f0f137 -0f010113 -0020e1b3 -fff10eb7 -ff0e8e93 -00300e13 -49d19063 -00ff00b7 -0ff08093 -0f0f1137 -f0f10113 -0020e1b3 -0fff1eb7 -fffe8e93 -00400e13 -45d19e63 -f00ff0b7 -00f08093 -f0f0f137 -0f010113 -0020e1b3 -f0fffeb7 -0ffe8e93 -00500e13 -43d19c63 -ff0100b7 -f0008093 -0f0f1137 -f0f10113 -0020e0b3 -ff100eb7 -f0fe8e93 -00600e13 -41d09a63 -ff0100b7 -f0008093 -0f0f1137 -f0f10113 -0020e133 -ff100eb7 -f0fe8e93 -00700e13 -3fd11863 -ff0100b7 -f0008093 -0010e0b3 -ff010eb7 -f00e8e93 -00800e13 -3dd09a63 -00000213 -ff0100b7 -f0008093 -0f0f1137 -f0f10113 -0020e1b3 -00018313 -00120213 -00200293 -fe5210e3 -ff100eb7 -f0fe8e93 -00900e13 -39d31e63 -00000213 -0ff010b7 -ff008093 -f0f0f137 -0f010113 -0020e1b3 -00000013 -00018313 -00120213 -00200293 -fc521ee3 -fff10eb7 -ff0e8e93 -00a00e13 -37d31063 -00000213 -00ff00b7 -0ff08093 -0f0f1137 -f0f10113 -0020e1b3 -00000013 -00000013 -00018313 -00120213 -00200293 -fc521ce3 -0fff1eb7 -fffe8e93 -00b00e13 -33d31063 -00000213 -ff0100b7 -f0008093 -0f0f1137 -f0f10113 -0020e1b3 -00120213 -00200293 -fe5212e3 -ff100eb7 -f0fe8e93 -00c00e13 -2fd19663 -00000213 -0ff010b7 -ff008093 -f0f0f137 -0f010113 -00000013 -0020e1b3 -00120213 -00200293 -fe5210e3 -fff10eb7 -ff0e8e93 -00d00e13 -2bd19a63 -00000213 -00ff00b7 -0ff08093 -0f0f1137 -f0f10113 -00000013 -00000013 -0020e1b3 -00120213 -00200293 -fc521ee3 -0fff1eb7 -fffe8e93 -00e00e13 -27d19c63 -00000213 -ff0100b7 -f0008093 -00000013 -0f0f1137 -f0f10113 -0020e1b3 -00120213 -00200293 -fe5210e3 -ff100eb7 -f0fe8e93 -00f00e13 -25d19063 -00000213 -0ff010b7 -ff008093 -00000013 -f0f0f137 -0f010113 -00000013 -0020e1b3 -00120213 -00200293 -fc521ee3 -fff10eb7 -ff0e8e93 -01000e13 -21d19263 -00000213 -00ff00b7 -0ff08093 -00000013 -00000013 -0f0f1137 -f0f10113 -0020e1b3 -00120213 -00200293 -fc521ee3 -0fff1eb7 -fffe8e93 -01100e13 -1dd19463 -00000213 -0f0f1137 -f0f10113 -ff0100b7 -f0008093 -0020e1b3 -00120213 -00200293 -fe5212e3 -ff100eb7 -f0fe8e93 -01200e13 -19d19a63 -00000213 -f0f0f137 -0f010113 -0ff010b7 -ff008093 -00000013 -0020e1b3 -00120213 -00200293 -fe5210e3 -fff10eb7 -ff0e8e93 -01300e13 -15d19e63 -00000213 -0f0f1137 -f0f10113 -00ff00b7 -0ff08093 -00000013 -00000013 -0020e1b3 -00120213 -00200293 -fc521ee3 -0fff1eb7 -fffe8e93 -01400e13 -13d19063 -00000213 -0f0f1137 -f0f10113 -00000013 -ff0100b7 -f0008093 -0020e1b3 -00120213 -00200293 -fe5210e3 -ff100eb7 -f0fe8e93 -01500e13 -0fd19463 -00000213 -f0f0f137 -0f010113 -00000013 -0ff010b7 -ff008093 -00000013 -0020e1b3 -00120213 -00200293 -fc521ee3 -fff10eb7 -ff0e8e93 -01600e13 -0bd19663 -00000213 -0f0f1137 -f0f10113 -00000013 -00000013 -00ff00b7 -0ff08093 -0020e1b3 -00120213 -00200293 -fc521ee3 -0fff1eb7 -fffe8e93 -01700e13 -07d19863 -ff0100b7 -f0008093 -00106133 -ff010eb7 -f00e8e93 -01800e13 -05d11a63 -00ff00b7 -0ff08093 -0000e133 -00ff0eb7 -0ffe8e93 -01900e13 -03d11c63 -000060b3 -00000e93 -01a00e13 -03d09463 -111110b7 -11108093 -22222137 -22210113 -0020e033 -00000e93 -01b00e13 -01d01463 -03c01a63 -10000537 -04500593 -05200613 -04f00693 -00a00713 -00b52023 -00c52023 -00c52023 -00d52023 -00c52023 -00e52023 -00100073 -10000537 -04f00593 -04b00613 -00a00693 -00b52023 -00c52023 -00d52023 -d2dfe06f -00002537 -8f850513 -10000637 -00050583 -00058a63 -00b62023 -00150513 -ff1ff06f -00726f78 -02e00593 -00b62023 -00b62023 -ff0100b7 -f0008093 -0f0f1137 -f0f10113 -0020c1b3 -f00ffeb7 -00fe8e93 -00200e13 -4bd19063 -0ff010b7 -ff008093 -f0f0f137 -0f010113 -0020c1b3 -ff010eb7 -f00e8e93 -00300e13 -47d19e63 -00ff00b7 -0ff08093 -0f0f1137 -f0f10113 -0020c1b3 -0ff01eb7 -ff0e8e93 -00400e13 -45d19c63 -f00ff0b7 -00f08093 -f0f0f137 -0f010113 -0020c1b3 -00ff0eb7 -0ffe8e93 -00500e13 -43d19a63 -ff0100b7 -f0008093 -0f0f1137 -f0f10113 -0020c0b3 -f00ffeb7 -00fe8e93 -00600e13 -41d09863 -ff0100b7 -f0008093 -0f0f1137 -f0f10113 -0020c133 -f00ffeb7 -00fe8e93 -00700e13 -3fd11663 -ff0100b7 -f0008093 -0010c0b3 -00000e93 -00800e13 -3dd09a63 -00000213 -ff0100b7 -f0008093 -0f0f1137 -f0f10113 -0020c1b3 -00018313 -00120213 -00200293 -fe5210e3 -f00ffeb7 -00fe8e93 -00900e13 -39d31e63 -00000213 -0ff010b7 -ff008093 -f0f0f137 -0f010113 -0020c1b3 -00000013 -00018313 -00120213 -00200293 -fc521ee3 -ff010eb7 -f00e8e93 -00a00e13 -37d31063 -00000213 -00ff00b7 -0ff08093 -0f0f1137 -f0f10113 -0020c1b3 -00000013 -00000013 -00018313 -00120213 -00200293 -fc521ce3 -0ff01eb7 -ff0e8e93 -00b00e13 -33d31063 -00000213 -ff0100b7 -f0008093 -0f0f1137 -f0f10113 -0020c1b3 -00120213 -00200293 -fe5212e3 -f00ffeb7 -00fe8e93 -00c00e13 -2fd19663 -00000213 -0ff010b7 -ff008093 -f0f0f137 -0f010113 -00000013 -0020c1b3 -00120213 -00200293 -fe5210e3 -ff010eb7 -f00e8e93 -00d00e13 -2bd19a63 -00000213 -00ff00b7 -0ff08093 -0f0f1137 -f0f10113 -00000013 -00000013 -0020c1b3 -00120213 -00200293 -fc521ee3 -0ff01eb7 -ff0e8e93 -00e00e13 -27d19c63 -00000213 -ff0100b7 -f0008093 -00000013 -0f0f1137 -f0f10113 -0020c1b3 -00120213 -00200293 -fe5210e3 -f00ffeb7 -00fe8e93 -00f00e13 -25d19063 -00000213 -0ff010b7 -ff008093 -00000013 -f0f0f137 -0f010113 -00000013 -0020c1b3 -00120213 -00200293 -fc521ee3 -ff010eb7 -f00e8e93 -01000e13 -21d19263 -00000213 -00ff00b7 -0ff08093 -00000013 -00000013 -0f0f1137 -f0f10113 -0020c1b3 -00120213 -00200293 -fc521ee3 -0ff01eb7 -ff0e8e93 -01100e13 -1dd19463 -00000213 -0f0f1137 -f0f10113 -ff0100b7 -f0008093 -0020c1b3 -00120213 -00200293 -fe5212e3 -f00ffeb7 -00fe8e93 -01200e13 -19d19a63 -00000213 -f0f0f137 -0f010113 -0ff010b7 -ff008093 -00000013 -0020c1b3 -00120213 -00200293 -fe5210e3 -ff010eb7 -f00e8e93 -01300e13 -15d19e63 -00000213 -0f0f1137 -f0f10113 -00ff00b7 -0ff08093 -00000013 -00000013 -0020c1b3 -00120213 -00200293 -fc521ee3 -0ff01eb7 -ff0e8e93 -01400e13 -13d19063 -00000213 -0f0f1137 -f0f10113 -00000013 -ff0100b7 -f0008093 -0020c1b3 -00120213 -00200293 -fe5210e3 -f00ffeb7 -00fe8e93 -01500e13 -0fd19463 -00000213 -f0f0f137 -0f010113 -00000013 -0ff010b7 -ff008093 -00000013 -0020c1b3 -00120213 -00200293 -fc521ee3 -ff010eb7 -f00e8e93 -01600e13 -0bd19663 -00000213 -0f0f1137 -f0f10113 -00000013 -00000013 -00ff00b7 -0ff08093 -0020c1b3 -00120213 -00200293 -fc521ee3 -0ff01eb7 -ff0e8e93 -01700e13 -07d19863 -ff0100b7 -f0008093 -00104133 -ff010eb7 -f00e8e93 -01800e13 -05d11a63 -00ff00b7 -0ff08093 -0000c133 -00ff0eb7 -0ffe8e93 -01900e13 -03d11c63 -000040b3 -00000e93 -01a00e13 -03d09463 -111110b7 -11108093 -22222137 -22210113 -0020c033 -00000e93 -01b00e13 -01d01463 -03c01a63 -10000537 -04500593 -05200613 -04f00693 -00a00713 -00b52023 -00c52023 -00c52023 -00d52023 -00c52023 -00e52023 -00100073 -10000537 -04f00593 -04b00613 -00a00693 -00b52023 -00c52023 -00d52023 -fc8fe06f -00002537 -e3850513 -10000637 -00050583 -00058a63 -00b62023 -00150513 -ff1ff06f -00627573 -02e00593 -00b62023 -00b62023 -00000093 -00000113 -402081b3 -00000e93 -00200e13 -4bd19663 -00100093 -00100113 -402081b3 -00000e93 -00300e13 -49d19a63 -00300093 -00700113 -402081b3 -ffc00e93 -00400e13 -47d19e63 -00000093 -ffff8137 -402081b3 -00008eb7 -00500e13 -47d19263 -800000b7 -00000113 -402081b3 -80000eb7 -00600e13 -45d19663 -800000b7 -ffff8137 -402081b3 -80008eb7 -00700e13 -43d19a63 -00000093 -00008137 -fff10113 -402081b3 -ffff8eb7 -001e8e93 -00800e13 -41d19a63 -800000b7 -fff08093 -00000113 -402081b3 -80000eb7 -fffe8e93 -00900e13 -3fd19a63 -800000b7 -fff08093 -00008137 -fff10113 -402081b3 -7fff8eb7 -00a00e13 -3dd19a63 -800000b7 -00008137 -fff10113 -402081b3 -7fff8eb7 -001e8e93 -00b00e13 -3bd19a63 -800000b7 -fff08093 -ffff8137 -402081b3 -80008eb7 -fffe8e93 -00c00e13 -39d19a63 -00000093 -fff00113 -402081b3 -00100e93 -00d00e13 -37d19e63 -fff00093 -00100113 -402081b3 -ffe00e93 -00e00e13 -37d19263 -fff00093 -fff00113 -402081b3 -00000e93 -00f00e13 -35d19663 -00d00093 -00b00113 -402080b3 -00200e93 -01000e13 -33d09a63 -00e00093 -00b00113 -40208133 -00300e93 -01100e13 -31d11e63 -00d00093 -401080b3 -00000e93 -01200e13 -31d09463 -00000213 -00d00093 -00b00113 -402081b3 -00018313 -00120213 -00200293 -fe5214e3 -00200e93 -01300e13 -2dd31e63 -00000213 -00e00093 -00b00113 -402081b3 -00000013 -00018313 -00120213 -00200293 -fe5212e3 -00300e93 -01400e13 -2bd31663 -00000213 -00f00093 -00b00113 -402081b3 -00000013 -00000013 -00018313 -00120213 -00200293 -fe5210e3 -00400e93 -01500e13 -27d31c63 -00000213 -00d00093 -00b00113 -402081b3 -00120213 -00200293 -fe5216e3 -00200e93 -01600e13 -25d19863 -00000213 -00e00093 -00b00113 -00000013 -402081b3 -00120213 -00200293 -fe5214e3 -00300e93 -01700e13 -23d19263 -00000213 -00f00093 -00b00113 -00000013 -00000013 -402081b3 -00120213 -00200293 -fe5212e3 -00400e93 -01800e13 -1fd19a63 -00000213 -00d00093 -00000013 -00b00113 -402081b3 -00120213 -00200293 -fe5214e3 -00200e93 -01900e13 -1dd19463 -00000213 -00e00093 -00000013 -00b00113 -00000013 -402081b3 -00120213 -00200293 -fe5212e3 -00300e93 -01a00e13 -19d19c63 -00000213 -00f00093 -00000013 -00000013 -00b00113 -402081b3 -00120213 -00200293 -fe5212e3 -00400e93 -01b00e13 -17d19463 -00000213 -00b00113 -00d00093 -402081b3 -00120213 -00200293 -fe5216e3 -00200e93 -01c00e13 -15d19063 -00000213 -00b00113 -00e00093 -00000013 -402081b3 -00120213 -00200293 -fe5214e3 -00300e93 -01d00e13 -11d19a63 -00000213 -00b00113 -00f00093 -00000013 -00000013 -402081b3 -00120213 -00200293 -fe5212e3 -00400e93 -01e00e13 -0fd19263 -00000213 -00b00113 -00000013 -00d00093 -402081b3 -00120213 -00200293 -fe5214e3 -00200e93 -01f00e13 -0bd19c63 -00000213 -00b00113 -00000013 -00e00093 -00000013 -402081b3 -00120213 -00200293 -fe5212e3 -00300e93 -02000e13 -09d19463 -00000213 -00b00113 -00000013 -00000013 -00f00093 -402081b3 -00120213 -00200293 -fe5212e3 -00400e93 -02100e13 -05d19c63 -ff100093 -40100133 -00f00e93 -02200e13 -05d11263 -02000093 -40008133 -02000e93 -02300e13 -03d11863 -400000b3 -00000e93 -02400e13 -03d09063 -01000093 -01e00113 -40208033 -00000e93 -02500e13 -01d01463 -03c01a63 -10000537 -04500593 -05200613 -04f00693 -00a00713 -00b52023 -00c52023 -00c52023 -00d52023 -00c52023 -00e52023 -00100073 -10000537 -04f00593 -04b00613 -00a00693 -00b52023 -00c52023 -00d52023 -a64fe06f -00002537 -37850513 -10000637 -00050583 -00058a63 -00b62023 -00150513 -ff1ff06f -0000626c -02e00593 -00b62023 -00b62023 -00007097 -09008093 -00008183 -fff00e93 -00200e13 -23d19c63 -00007097 -07808093 -00108183 -00000e93 -00300e13 -23d19063 -00007097 -06008093 -00208183 -ff000e93 -00400e13 -21d19463 -00007097 -04808093 -00308183 -00f00e93 -00500e13 -1fd19863 -00007097 -03308093 -ffd08183 -fff00e93 -00600e13 -1dd19c63 -00007097 -01b08093 -ffe08183 -00000e93 -00700e13 -1dd19063 -00007097 -00308093 -fff08183 -ff000e93 -00800e13 -1bd19463 -00007097 -feb08093 -00008183 -00f00e93 -00900e13 -19d19863 -00007097 -fd008093 -fe008093 -02008183 -fff00e93 -00a00e13 -17d19a63 -00007097 -fb408093 -ffa08093 -00708183 -00000e93 -00b00e13 -15d19c63 -00c00e13 -00000213 -00007097 -f9108093 -00108183 -00018313 -ff000e93 -13d31c63 -00120213 -00200293 -fe5210e3 -00d00e13 -00000213 -00007097 -f6608093 -00108183 -00000013 -00018313 -00f00e93 -11d31463 -00120213 -00200293 -fc521ee3 -00e00e13 -00000213 -00007097 -f3408093 -00108183 -00000013 -00000013 -00018313 -00000e93 -0dd31a63 -00120213 -00200293 -fc521ce3 -00f00e13 -00000213 -00007097 -f0108093 -00108183 -ff000e93 -0bd19663 -00120213 -00200293 -fe5212e3 -01000e13 -00000213 -00007097 -eda08093 -00000013 -00108183 -00f00e93 -09d19063 -00120213 -00200293 -fe5210e3 -01100e13 -00000213 -00007097 -eac08093 -00000013 -00000013 -00108183 -00000e93 -05d19863 -00120213 -00200293 -fc521ee3 -00007197 -e8418193 -00018103 -00200113 -00200e93 -01200e13 -03d11463 -00007197 -e6818193 -00018103 -00000013 -00200113 -00200e93 -01300e13 -01d11463 -03c01a63 -10000537 -04500593 -05200613 -04f00693 -00a00713 -00b52023 -00c52023 -00c52023 -00d52023 -00c52023 -00e52023 -00100073 -10000537 -04f00593 -04b00613 -00a00693 -00b52023 -00c52023 -00d52023 -ecdfd06f -00002537 -64450513 -10000637 -00050583 -00058a63 -00b62023 -00150513 -ff1ff06f -0000686c -02e00593 -00b62023 -00b62023 -00007097 -dc808093 -00009183 -0ff00e93 -00200e13 -25d19c63 -00007097 -db008093 -00209183 -f0000e93 -00300e13 -25d19063 -00007097 -d9808093 -00409183 -00001eb7 -ff0e8e93 -00400e13 -23d19263 -00007097 -d7c08093 -00609183 -fffffeb7 -00fe8e93 -00500e13 -21d19463 -00007097 -d6608093 -ffa09183 -0ff00e93 -00600e13 -1fd19863 -00007097 -d4e08093 -ffc09183 -f0000e93 -00700e13 -1dd19c63 -00007097 -d3608093 -ffe09183 -00001eb7 -ff0e8e93 -00800e13 -1bd19e63 -00007097 -d1a08093 -00009183 -fffffeb7 -00fe8e93 -00900e13 -1bd19063 -00007097 -cf808093 -fe008093 -02009183 -0ff00e93 -00a00e13 -19d19263 -00007097 -cdc08093 -ffb08093 -00709183 -f0000e93 -00b00e13 -17d19463 -00c00e13 -00000213 -00007097 -cba08093 -00209183 -00018313 -00001eb7 -ff0e8e93 -15d31263 -00120213 -00200293 -fc521ee3 -00d00e13 -00000213 -00007097 -c8c08093 -00209183 -00000013 -00018313 -fffffeb7 -00fe8e93 -11d31863 -00120213 -00200293 -fc521ce3 -00e00e13 -00000213 -00007097 -c5408093 -00209183 -00000013 -00000013 -00018313 -f0000e93 -0dd31e63 -00120213 -00200293 -fc521ce3 -00f00e13 -00000213 -00007097 -c2208093 -00209183 -00001eb7 -ff0e8e93 -0bd19863 -00120213 -00200293 -fe5210e3 -01000e13 -00000213 -00007097 -bf808093 -00000013 -00209183 -fffffeb7 -00fe8e93 -09d19063 -00120213 -00200293 -fc521ee3 -01100e13 -00000213 -00007097 -bc408093 -00000013 -00000013 -00209183 -f0000e93 -05d19863 -00120213 -00200293 -fc521ee3 -00007197 -b9c18193 -00019103 -00200113 -00200e93 -01200e13 -03d11463 -00007197 -b8018193 -00019103 -00000013 -00200113 -00200e93 -01300e13 -01d11463 -03c01a63 -10000537 -04500593 -05200613 -04f00693 -00a00713 -00b52023 -00c52023 -00c52023 -00d52023 -00c52023 -00e52023 -00100073 -10000537 -04f00593 -04b00613 -00a00693 -00b52023 -00c52023 -00d52023 -bedfd06f -00003537 -93050513 -10000637 -00050583 -00058a63 -00b62023 -00150513 -ff1ff06f -006c7273 -02e00593 -00b62023 -00b62023 -ffff80b7 -00000113 -0020d1b3 -ffff8eb7 -00200e13 -5bd19463 -ffff80b7 -00100113 -0020d1b3 -7fffceb7 -00300e13 -59d19863 -ffff80b7 -00700113 -0020d1b3 -02000eb7 -f00e8e93 -00400e13 -57d19a63 -ffff80b7 -00e00113 -0020d1b3 -00040eb7 -ffee8e93 -00500e13 -55d19c63 -ffff80b7 -00108093 -00f00113 -0020d1b3 -00020eb7 -fffe8e93 -00600e13 -53d19c63 -fff00093 -00000113 -0020d1b3 -fff00e93 -00700e13 -53d19063 -fff00093 -00100113 -0020d1b3 -80000eb7 -fffe8e93 -00800e13 -51d19263 -fff00093 -00700113 -0020d1b3 -02000eb7 -fffe8e93 -00900e13 -4fd19463 -fff00093 -00e00113 -0020d1b3 -00040eb7 -fffe8e93 -00a00e13 -4dd19663 -fff00093 -01f00113 -0020d1b3 -00100e93 -00b00e13 -4bd19a63 -212120b7 -12108093 -00000113 -0020d1b3 -21212eb7 -121e8e93 -00c00e13 -49d19a63 -212120b7 -12108093 -00100113 -0020d1b3 -10909eb7 -090e8e93 -00d00e13 -47d19a63 -212120b7 -12108093 -00700113 -0020d1b3 -00424eb7 -242e8e93 -00e00e13 -45d19a63 -212120b7 -12108093 -00e00113 -0020d1b3 -00008eb7 -484e8e93 -00f00e13 -43d19a63 -212120b7 -12108093 -01f00113 -0020d1b3 -00000e93 -01000e13 -41d19c63 -212120b7 -12108093 -fe000113 -0020d1b3 -21212eb7 -121e8e93 -01100e13 -3fd19c63 -212120b7 -12108093 -fe100113 -0020d1b3 -10909eb7 -090e8e93 -01200e13 -3dd19c63 -212120b7 -12108093 -fe700113 -0020d1b3 -00424eb7 -242e8e93 -01300e13 -3bd19c63 -212120b7 -12108093 -fee00113 -0020d1b3 -00008eb7 -484e8e93 -01400e13 -39d19c63 -212120b7 -12108093 -fff00113 -0020d1b3 -00000e93 -01500e13 -37d19e63 -ffff80b7 -00100113 -0020d0b3 -7fffceb7 -01600e13 -37d09263 -ffff80b7 -00e00113 -0020d133 -00040eb7 -ffee8e93 -01700e13 -35d11463 -00700093 -0010d0b3 -00000e93 -01800e13 -33d09a63 -00000213 -ffff80b7 -00100113 -0020d1b3 -00018313 -00120213 -00200293 -fe5214e3 -7fffceb7 -01900e13 -31d31463 -00000213 -ffff80b7 -00e00113 -0020d1b3 -00000013 -00018313 -00120213 -00200293 -fe5212e3 -00040eb7 -ffee8e93 -01a00e13 -2dd31a63 -00000213 -ffff80b7 -00f00113 -0020d1b3 -00000013 -00000013 -00018313 -00120213 -00200293 -fe5210e3 -00020eb7 -fffe8e93 -01b00e13 -29d31e63 -00000213 -ffff80b7 -00100113 -0020d1b3 -00120213 -00200293 -fe5216e3 -7fffceb7 -01c00e13 -27d19a63 -00000213 -ffff80b7 -00700113 -00000013 -0020d1b3 -00120213 -00200293 -fe5214e3 -02000eb7 -f00e8e93 -01d00e13 -25d19263 -00000213 -ffff80b7 -00f00113 -00000013 -00000013 -0020d1b3 -00120213 -00200293 -fe5212e3 -00020eb7 -fffe8e93 -01e00e13 -21d19863 -00000213 -ffff80b7 -00000013 -00100113 -0020d1b3 -00120213 -00200293 -fe5214e3 -7fffceb7 -01f00e13 -1fd19263 -00000213 -ffff80b7 -00000013 -00700113 -00000013 -0020d1b3 -00120213 -00200293 -fe5212e3 -02000eb7 -f00e8e93 -02000e13 -1bd19863 -00000213 -ffff80b7 -00000013 -00000013 -00f00113 -0020d1b3 -00120213 -00200293 -fe5212e3 -00020eb7 -fffe8e93 -02100e13 -17d19e63 -00000213 -00100113 -ffff80b7 -0020d1b3 -00120213 -00200293 -fe5216e3 -7fffceb7 -02200e13 -15d19a63 -00000213 -00700113 -ffff80b7 -00000013 -0020d1b3 -00120213 -00200293 -fe5214e3 -02000eb7 -f00e8e93 -02300e13 -13d19263 -00000213 -00f00113 -ffff80b7 -00000013 -00000013 -0020d1b3 -00120213 -00200293 -fe5212e3 -00020eb7 -fffe8e93 -02400e13 -0fd19863 -00000213 -00100113 -00000013 -ffff80b7 -0020d1b3 -00120213 -00200293 -fe5214e3 -7fffceb7 -02500e13 -0dd19263 -00000213 -00700113 -00000013 -ffff80b7 -00000013 -0020d1b3 -00120213 -00200293 -fe5212e3 -02000eb7 -f00e8e93 -02600e13 -09d19863 -00000213 -00f00113 -00000013 -00000013 -ffff80b7 -0020d1b3 -00120213 -00200293 -fe5212e3 -00020eb7 -fffe8e93 -02700e13 -05d19e63 -00f00093 -00105133 -00000e93 -02800e13 -05d11463 -02000093 -0000d133 -02000e93 -02900e13 -03d11a63 -000050b3 -00000e93 -02a00e13 -03d09263 -40000093 -00001137 -80010113 -0020d033 -00000e93 -02b00e13 -01d01463 -03c01a63 -10000537 -04500593 -05200613 -04f00693 -00a00713 -00b52023 -00c52023 -00c52023 -00d52023 -00c52023 -00e52023 -00100073 -10000537 -04f00593 -04b00613 -00a00693 -00b52023 -00c52023 -00d52023 -ea0fd06f -00003537 -f6c50513 -10000637 -00050583 -00058a63 -00b62023 -00150513 -ff1ff06f -00646e61 -02e00593 -00b62023 -00b62023 -ff0100b7 -f0008093 -0f0f1137 -f0f10113 -0020f1b3 -0f001eb7 -f00e8e93 -00200e13 -49d19c63 -0ff010b7 -ff008093 -f0f0f137 -0f010113 -0020f1b3 -00f00eb7 -0f0e8e93 -00300e13 -47d19a63 -00ff00b7 -0ff08093 -0f0f1137 -f0f10113 -0020f1b3 -000f0eb7 -00fe8e93 -00400e13 -45d19863 -f00ff0b7 -00f08093 -f0f0f137 -0f010113 -0020f1b3 -f000feb7 -00500e13 -43d19863 -ff0100b7 -f0008093 -0f0f1137 -f0f10113 -0020f0b3 -0f001eb7 -f00e8e93 -00600e13 -41d09663 -0ff010b7 -ff008093 -f0f0f137 -0f010113 -0020f133 -00f00eb7 -0f0e8e93 -00700e13 -3fd11463 -ff0100b7 -f0008093 -0010f0b3 -ff010eb7 -f00e8e93 -00800e13 -3dd09663 -00000213 -ff0100b7 -f0008093 -0f0f1137 -f0f10113 -0020f1b3 -00018313 -00120213 -00200293 -fe5210e3 -0f001eb7 -f00e8e93 -00900e13 -39d31a63 -00000213 -0ff010b7 -ff008093 -f0f0f137 -0f010113 -0020f1b3 -00000013 -00018313 -00120213 -00200293 -fc521ee3 -00f00eb7 -0f0e8e93 -00a00e13 -35d31c63 -00000213 -00ff00b7 -0ff08093 -0f0f1137 -f0f10113 -0020f1b3 -00000013 -00000013 -00018313 -00120213 -00200293 -fc521ce3 -000f0eb7 -00fe8e93 -00b00e13 -31d31c63 -00000213 -ff0100b7 -f0008093 -0f0f1137 -f0f10113 -0020f1b3 -00120213 -00200293 -fe5212e3 -0f001eb7 -f00e8e93 -00c00e13 -2fd19263 -00000213 -0ff010b7 -ff008093 -f0f0f137 -0f010113 -00000013 -0020f1b3 -00120213 -00200293 -fe5210e3 -00f00eb7 -0f0e8e93 -00d00e13 -2bd19663 -00000213 -00ff00b7 -0ff08093 -0f0f1137 -f0f10113 -00000013 -00000013 -0020f1b3 -00120213 -00200293 -fc521ee3 -000f0eb7 -00fe8e93 -00e00e13 -27d19863 -00000213 -ff0100b7 -f0008093 -00000013 -0f0f1137 -f0f10113 -0020f1b3 -00120213 -00200293 -fe5210e3 -0f001eb7 -f00e8e93 -00f00e13 -23d19c63 -00000213 -0ff010b7 -ff008093 -00000013 -f0f0f137 -0f010113 -00000013 -0020f1b3 -00120213 -00200293 -fc521ee3 -00f00eb7 -0f0e8e93 -01000e13 -1fd19e63 -00000213 -00ff00b7 -0ff08093 -00000013 -00000013 -0f0f1137 -f0f10113 -0020f1b3 -00120213 -00200293 -fc521ee3 -000f0eb7 -00fe8e93 -01100e13 -1dd19063 -00000213 -0f0f1137 -f0f10113 -ff0100b7 -f0008093 -0020f1b3 -00120213 -00200293 -fe5212e3 -0f001eb7 -f00e8e93 -01200e13 -19d19663 -00000213 -f0f0f137 -0f010113 -0ff010b7 -ff008093 -00000013 -0020f1b3 -00120213 -00200293 -fe5210e3 -00f00eb7 -0f0e8e93 -01300e13 -15d19a63 -00000213 -0f0f1137 -f0f10113 -00ff00b7 -0ff08093 -00000013 -00000013 -0020f1b3 -00120213 -00200293 -fc521ee3 -000f0eb7 -00fe8e93 -01400e13 -11d19c63 -00000213 -0f0f1137 -f0f10113 -00000013 -ff0100b7 -f0008093 -0020f1b3 -00120213 -00200293 -fe5210e3 -0f001eb7 -f00e8e93 -01500e13 -0fd19063 -00000213 -f0f0f137 -0f010113 -00000013 -0ff010b7 -ff008093 -00000013 -0020f1b3 -00120213 -00200293 -fc521ee3 -00f00eb7 -0f0e8e93 -01600e13 -0bd19263 -00000213 -0f0f1137 -f0f10113 -00000013 -00000013 -00ff00b7 -0ff08093 -0020f1b3 -00120213 -00200293 -fc521ee3 -000f0eb7 -00fe8e93 -01700e13 -07d19463 -ff0100b7 -f0008093 -00107133 -00000e93 -01800e13 -05d11863 -00ff00b7 -0ff08093 -0000f133 -00000e93 -01900e13 -03d11c63 -000070b3 -00000e93 -01a00e13 -03d09463 -111110b7 -11108093 -22222137 -22210113 -0020f033 -00000e93 -01b00e13 -01d01463 -03c01a63 -10000537 -04500593 -05200613 -04f00693 -00a00713 -00b52023 -00c52023 -00c52023 -00d52023 -00c52023 -00e52023 -00100073 -10000537 -04f00593 -04b00613 -00a00693 -00b52023 -00c52023 -00d52023 -98cfd06f -00003537 -4a450513 -10000637 -00050583 -00058c63 -00b62023 -00150513 -ff1ff06f -69617273 -00000000 -02e00593 -00b62023 -00b62023 -00000093 -4000d193 -00000e93 -00200e13 -2bd19463 -800000b7 -4010d193 -c0000eb7 -00300e13 -29d19a63 -800000b7 -4070d193 -ff000eb7 -00400e13 -29d19063 -800000b7 -40e0d193 -fffe0eb7 -00500e13 -27d19663 -800000b7 -00108093 -41f0d193 -fff00e93 -00600e13 -25d19a63 -800000b7 -fff08093 -4000d193 -80000eb7 -fffe8e93 -00700e13 -23d19c63 -800000b7 -fff08093 -4010d193 -40000eb7 -fffe8e93 -00800e13 -21d19e63 -800000b7 -fff08093 -4070d193 -01000eb7 -fffe8e93 -00900e13 -21d19063 -800000b7 -fff08093 -40e0d193 -00020eb7 -fffe8e93 -00a00e13 -1fd19263 -800000b7 -fff08093 -41f0d193 -00000e93 -00b00e13 -1dd19663 -818180b7 -18108093 -4000d193 -81818eb7 -181e8e93 -00c00e13 -1bd19863 -818180b7 -18108093 -4010d193 -c0c0ceb7 -0c0e8e93 -00d00e13 -19d19a63 -818180b7 -18108093 -4070d193 -ff030eb7 -303e8e93 -00e00e13 -17d19c63 -818180b7 -18108093 -40e0d193 -fffe0eb7 -606e8e93 -00f00e13 -15d19e63 -818180b7 -18108093 -41f0d193 -fff00e93 -01000e13 -15d19263 -800000b7 -4070d093 -ff000eb7 -01100e13 -13d09863 -00000213 -800000b7 -4070d193 -00018313 -00120213 -00200293 -fe5216e3 -ff000eb7 -01200e13 -11d31463 -00000213 -800000b7 -40e0d193 -00000013 -00018313 -00120213 -00200293 -fe5214e3 -fffe0eb7 -01300e13 -0dd31e63 -00000213 -800000b7 -00108093 -41f0d193 -00000013 -00000013 -00018313 -00120213 -00200293 -fe5210e3 -fff00e93 -01400e13 -0bd31463 -00000213 -800000b7 -4070d193 -00120213 -00200293 -fe5218e3 -ff000eb7 -01500e13 -09d19263 -00000213 -800000b7 -00000013 -40e0d193 -00120213 -00200293 -fe5216e3 -fffe0eb7 -01600e13 -05d19e63 -00000213 -800000b7 -00108093 -00000013 -00000013 -41f0d193 -00120213 -00200293 -fe5212e3 -fff00e93 -01700e13 -03d19663 -41f05093 -00000e93 -01800e13 -01d09e63 -02100093 -4140d013 -00000e93 -01900e13 -01d01463 -03c01a63 -10000537 -04500593 -05200613 -04f00693 -00a00713 -00b52023 -00c52023 -00c52023 -00d52023 -00c52023 -00e52023 -00100073 -10000537 -04f00593 -04b00613 -00a00693 -00b52023 -00c52023 -00d52023 -de5fc06f -00003537 -7e050513 -10000637 -00050583 -00058c63 -00b62023 -00150513 -ff1ff06f -75746c62 -00000000 -02e00593 -00b62023 -00b62023 -00200e13 -00000093 -00100113 -0020e663 -2fc01263 -01c01663 -fe20eee3 -2dc01c63 -00300e13 -ffe00093 -fff00113 -0020e663 -2dc01263 -01c01663 -fe20eee3 -2bc01c63 -00400e13 -00000093 -fff00113 -0020e663 -2bc01263 -01c01663 -fe20eee3 -29c01c63 -00500e13 -00100093 -00000113 -0020e463 -01c01463 -29c01063 -fe20eee3 -00600e13 -fff00093 -ffe00113 -0020e463 -01c01463 -27c01263 -fe20eee3 -00700e13 -fff00093 -00000113 -0020e463 -01c01463 -25c01463 -fe20eee3 -00800e13 -800000b7 -80000137 -fff10113 -0020e463 -01c01463 -23c01463 -fe20eee3 -00900e13 -00000213 -f00000b7 -f0000137 -fff10113 -2020e663 -00120213 -00200293 -fe5214e3 -00a00e13 -00000213 -f00000b7 -f0000137 -fff10113 -00000013 -1e20e263 -00120213 -00200293 -fe5212e3 -00b00e13 -00000213 -f00000b7 -f0000137 -fff10113 -00000013 -00000013 -1a20ec63 -00120213 -00200293 -fe5210e3 -00c00e13 -00000213 -f00000b7 -00000013 -f0000137 -fff10113 -1820e863 -00120213 -00200293 -fe5212e3 -00d00e13 -00000213 -f00000b7 -00000013 -f0000137 -fff10113 -00000013 -1620e263 -00120213 -00200293 -fe5210e3 -00e00e13 -00000213 -f00000b7 -00000013 -00000013 -f0000137 -fff10113 -1220ec63 -00120213 -00200293 -fe5210e3 -00f00e13 -00000213 -f00000b7 -f0000137 -fff10113 -1020ea63 -00120213 -00200293 -fe5214e3 -01000e13 -00000213 -f00000b7 -f0000137 -fff10113 -00000013 -0e20e663 -00120213 -00200293 -fe5212e3 -01100e13 -00000213 -f00000b7 -f0000137 -fff10113 -00000013 -00000013 -0c20e063 -00120213 -00200293 -fe5210e3 -01200e13 -00000213 -f00000b7 -00000013 -f0000137 -fff10113 -0820ec63 -00120213 -00200293 -fe5212e3 -01300e13 -00000213 -f00000b7 -00000013 -f0000137 -fff10113 -00000013 -0620e663 -00120213 -00200293 -fe5210e3 -01400e13 -00000213 -f00000b7 -00000013 -00000013 -f0000137 -fff10113 -0420e063 -00120213 -00200293 -fe5210e3 -00100093 -00106a63 -00108093 -00108093 -00108093 -00108093 -00108093 -00108093 -00300e93 -01500e13 -01d09463 -03c01a63 -10000537 -04500593 -05200613 -04f00693 -00a00713 -00b52023 -00c52023 -00c52023 -00d52023 -00c52023 -00e52023 -00100073 -10000537 -04f00593 -04b00613 -00a00693 -00b52023 -00c52023 -00d52023 -9a1fc06f -00004537 -b5850513 -10000637 -00050583 -00058c63 -00b62023 -00150513 -ff1ff06f -69646461 -00000000 -02e00593 -00b62023 -00b62023 -00000093 -00008193 -00000e93 -00200e13 -27d19c63 -00100093 -00108193 -00200e93 -00300e13 -27d19263 -00300093 -00708193 -00a00e93 -00400e13 -25d19863 -00000093 -80008193 -80000e93 -00500e13 -23d19e63 -800000b7 -00008193 -80000eb7 -00600e13 -23d19463 -800000b7 -80008193 -80000eb7 -800e8e93 -00700e13 -21d19863 -00000093 -7ff08193 -7ff00e93 -00800e13 -1fd19e63 -800000b7 -fff08093 -00008193 -80000eb7 -fffe8e93 -00900e13 -1fd19063 -800000b7 -fff08093 -7ff08193 -80000eb7 -7fee8e93 -00a00e13 -1dd19263 -800000b7 -7ff08193 -80000eb7 -7ffe8e93 -00b00e13 -1bd19663 -800000b7 -fff08093 -80008193 -7ffffeb7 -7ffe8e93 -00c00e13 -19d19863 -00000093 -fff08193 -fff00e93 -00d00e13 -17d19e63 -fff00093 -00108193 -00000e93 -00e00e13 -17d19463 -fff00093 -fff08193 -ffe00e93 -00f00e13 -15d19a63 -800000b7 -fff08093 -00108193 -80000eb7 -01000e13 -13d19e63 -00d00093 -00b08093 -01800e93 -01100e13 -13d09463 -00000213 -00d00093 -00b08193 -00018313 -00120213 -00200293 -fe5216e3 -01800e93 -01200e13 -11d31063 -00000213 -00d00093 -00a08193 -00000013 -00018313 -00120213 -00200293 -fe5214e3 -01700e93 -01300e13 -0dd31a63 -00000213 -00d00093 -00908193 -00000013 -00000013 -00018313 -00120213 -00200293 -fe5212e3 -01600e93 -01400e13 -0bd31263 -00000213 -00d00093 -00b08193 -00120213 -00200293 -fe5218e3 -01800e93 -01500e13 -09d19063 -00000213 -00d00093 -00000013 -00a08193 -00120213 -00200293 -fe5216e3 -01700e93 -01600e13 -05d19c63 -00000213 -00d00093 -00000013 -00000013 -00908193 -00120213 -00200293 -fe5214e3 -01600e93 -01700e13 -03d19663 -02000093 -02000e93 -01800e13 -01d09e63 -02100093 -03208013 -00000e93 -01900e13 -01d01463 -03c01a63 -10000537 -04500593 -05200613 -04f00693 -00a00713 -00b52023 -00c52023 -00c52023 -00d52023 -00c52023 -00e52023 -00100073 -10000537 -04f00593 -04b00613 -00a00693 -00b52023 -00c52023 -00d52023 -f0cfc06f -00004537 -e6450513 -10000637 -00050583 -00058a63 -00b62023 -00150513 -ff1ff06f -00716562 -02e00593 -00b62023 -00b62023 -00200e13 -00000093 -00000113 -00208663 -2bc01863 -01c01663 -fe208ee3 -2bc01263 -00300e13 -00100093 -00100113 -00208663 -29c01863 -01c01663 -fe208ee3 -29c01263 -00400e13 -fff00093 -fff00113 -00208663 -27c01863 -01c01663 -fe208ee3 -27c01263 -00500e13 -00000093 -00100113 -00208463 -01c01463 -25c01663 -fe208ee3 -00600e13 -00100093 -00000113 -00208463 -01c01463 -23c01863 -fe208ee3 -00700e13 -fff00093 -00100113 -00208463 -01c01463 -21c01a63 -fe208ee3 -00800e13 -00100093 -fff00113 -00208463 -01c01463 -1fc01c63 -fe208ee3 -00900e13 -00000213 -00000093 -fff00113 -1e208063 -00120213 -00200293 -fe5216e3 -00a00e13 -00000213 -00000093 -fff00113 -00000013 -1a208e63 -00120213 -00200293 -fe5214e3 -00b00e13 -00000213 -00000093 -fff00113 -00000013 -00000013 -18208a63 -00120213 -00200293 -fe5212e3 -00c00e13 -00000213 -00000093 -00000013 -fff00113 -16208863 -00120213 -00200293 -fe5214e3 -00d00e13 -00000213 -00000093 -00000013 -fff00113 -00000013 -14208463 -00120213 -00200293 -fe5212e3 -00e00e13 -00000213 -00000093 -00000013 -00000013 -fff00113 -12208063 -00120213 -00200293 -fe5212e3 -00f00e13 -00000213 -00000093 -fff00113 -10208063 -00120213 -00200293 -fe5216e3 -01000e13 -00000213 -00000093 -fff00113 -00000013 -0c208e63 -00120213 -00200293 -fe5214e3 -01100e13 -00000213 -00000093 -fff00113 -00000013 -00000013 -0a208a63 -00120213 -00200293 -fe5212e3 -01200e13 -00000213 -00000093 -00000013 -fff00113 -08208863 -00120213 -00200293 -fe5214e3 -01300e13 -00000213 -00000093 -00000013 -fff00113 -00000013 -06208463 -00120213 -00200293 -fe5212e3 -01400e13 -00000213 -00000093 -00000013 -00000013 -fff00113 -04208063 -00120213 -00200293 -fe5212e3 -00100093 -00000a63 -00108093 -00108093 -00108093 -00108093 -00108093 -00108093 -00300e93 -01500e13 -01d09463 -03c01a63 -10000537 -04500593 -05200613 -04f00693 -00a00713 -00b52023 -00c52023 -00c52023 -00d52023 -00c52023 -00e52023 -00100073 -10000537 -04f00593 -04b00613 -00a00693 -00b52023 -00c52023 -00d52023 -b24fc06f -00004537 -1a450513 -10000637 -00050583 -00058a63 -00b62023 -00150513 -ff1ff06f -00617273 -02e00593 -00b62023 -00b62023 -800000b7 -00000113 -4020d1b3 -80000eb7 -00200e13 -59d19463 -800000b7 -00100113 -4020d1b3 -c0000eb7 -00300e13 -57d19863 -800000b7 -00700113 -4020d1b3 -ff000eb7 -00400e13 -55d19c63 -800000b7 -00e00113 -4020d1b3 -fffe0eb7 -00500e13 -55d19063 -800000b7 -00108093 -01f00113 -4020d1b3 -fff00e93 -00600e13 -53d19263 -800000b7 -fff08093 -00000113 -4020d1b3 -80000eb7 -fffe8e93 -00700e13 -51d19263 -800000b7 -fff08093 -00100113 -4020d1b3 -40000eb7 -fffe8e93 -00800e13 -4fd19263 -800000b7 -fff08093 -00700113 -4020d1b3 -01000eb7 -fffe8e93 -00900e13 -4dd19263 -800000b7 -fff08093 -00e00113 -4020d1b3 -00020eb7 -fffe8e93 -00a00e13 -4bd19263 -800000b7 -fff08093 -01f00113 -4020d1b3 -00000e93 -00b00e13 -49d19463 -818180b7 -18108093 -00000113 -4020d1b3 -81818eb7 -181e8e93 -00c00e13 -47d19463 -818180b7 -18108093 -00100113 -4020d1b3 -c0c0ceb7 -0c0e8e93 -00d00e13 -45d19463 -818180b7 -18108093 -00700113 -4020d1b3 -ff030eb7 -303e8e93 -00e00e13 -43d19463 -818180b7 -18108093 -00e00113 -4020d1b3 -fffe0eb7 -606e8e93 -00f00e13 -41d19463 -818180b7 -18108093 -01f00113 -4020d1b3 -fff00e93 -01000e13 -3fd19663 -818180b7 -18108093 -fc000113 -4020d1b3 -81818eb7 -181e8e93 -01100e13 -3dd19663 -818180b7 -18108093 -fc100113 -4020d1b3 -c0c0ceb7 -0c0e8e93 -01200e13 -3bd19663 -818180b7 -18108093 -fc700113 -4020d1b3 -ff030eb7 -303e8e93 -01300e13 -39d19663 -818180b7 -18108093 -fce00113 -4020d1b3 -fffe0eb7 -606e8e93 -01400e13 -37d19663 -818180b7 -18108093 -fff00113 -4020d1b3 -fff00e93 -01500e13 -35d19863 -800000b7 -00700113 -4020d0b3 -ff000eb7 -01600e13 -33d09c63 -800000b7 -00e00113 -4020d133 -fffe0eb7 -01700e13 -33d11063 -00700093 -4010d0b3 -00000e93 -01800e13 -31d09663 -00000213 -800000b7 -00700113 -4020d1b3 -00018313 -00120213 -00200293 -fe5214e3 -ff000eb7 -01900e13 -2fd31063 -00000213 -800000b7 -00e00113 -4020d1b3 -00000013 -00018313 -00120213 -00200293 -fe5212e3 -fffe0eb7 -01a00e13 -2bd31863 -00000213 -800000b7 -01f00113 -4020d1b3 -00000013 -00000013 -00018313 -00120213 -00200293 -fe5210e3 -fff00e93 -01b00e13 -27d31e63 -00000213 -800000b7 -00700113 -4020d1b3 -00120213 -00200293 -fe5216e3 -ff000eb7 -01c00e13 -25d19a63 -00000213 -800000b7 -00e00113 -00000013 -4020d1b3 -00120213 -00200293 -fe5214e3 -fffe0eb7 -01d00e13 -23d19463 -00000213 -800000b7 -01f00113 -00000013 -00000013 -4020d1b3 -00120213 -00200293 -fe5212e3 -fff00e93 -01e00e13 -1fd19c63 -00000213 -800000b7 -00000013 -00700113 -4020d1b3 -00120213 -00200293 -fe5214e3 -ff000eb7 -01f00e13 -1dd19663 -00000213 -800000b7 -00000013 -00e00113 -00000013 -4020d1b3 -00120213 -00200293 -fe5212e3 -fffe0eb7 -02000e13 -19d19e63 -00000213 -800000b7 -00000013 -00000013 -01f00113 -4020d1b3 -00120213 -00200293 -fe5212e3 -fff00e93 -02100e13 -17d19663 -00000213 -00700113 -800000b7 -4020d1b3 -00120213 -00200293 -fe5216e3 -ff000eb7 -02200e13 -15d19263 -00000213 -00e00113 -800000b7 -00000013 -4020d1b3 -00120213 -00200293 -fe5214e3 -fffe0eb7 -02300e13 -11d19c63 -00000213 -01f00113 -800000b7 -00000013 -00000013 -4020d1b3 -00120213 -00200293 -fe5212e3 -fff00e93 -02400e13 -0fd19463 -00000213 -00700113 -00000013 -800000b7 -4020d1b3 -00120213 -00200293 -fe5214e3 -ff000eb7 -02500e13 -0bd19e63 -00000213 -00e00113 -00000013 -800000b7 -00000013 -4020d1b3 -00120213 -00200293 -fe5212e3 -fffe0eb7 -02600e13 -09d19663 -00000213 -01f00113 -00000013 -00000013 -800000b7 -4020d1b3 -00120213 -00200293 -fe5212e3 -fff00e93 -02700e13 -05d19e63 -00f00093 -40105133 -00000e93 -02800e13 -05d11463 -02000093 -4000d133 -02000e93 -02900e13 -03d11a63 -400050b3 -00000e93 -02a00e13 -03d09263 -40000093 -00001137 -80010113 -4020d033 -00000e93 -02b00e13 -01d01463 -03c01a63 -10000537 -04500593 -05200613 -04f00693 -00a00713 -00b52023 -00c52023 -00c52023 -00d52023 -00c52023 -00e52023 -00100073 -10000537 -04f00593 -04b00613 -00a00693 -00b52023 -00c52023 -00d52023 -e59fb06f -00004537 -7c050513 -10000637 -00050583 -00058a63 -00b62023 -00150513 -ff1ff06f -00007773 -02e00593 -00b62023 -00b62023 -00005097 -c5408093 -00aa0137 -0aa10113 -0020a023 -0000a183 -00aa0eb7 -0aae8e93 -00200e13 -47d19063 -00005097 -c2c08093 -aa00b137 -a0010113 -0020a223 -0040a183 -aa00beb7 -a00e8e93 -00300e13 -43d19c63 -00005097 -c0408093 -0aa01137 -aa010113 -0020a423 -0080a183 -0aa01eb7 -aa0e8e93 -00400e13 -41d19863 -00005097 -bdc08093 -a00aa137 -00a10113 -0020a623 -00c0a183 -a00aaeb7 -00ae8e93 -00500e13 -3fd19463 -00005097 -bd008093 -00aa0137 -0aa10113 -fe20aa23 -ff40a183 -00aa0eb7 -0aae8e93 -00600e13 -3dd19063 -00005097 -ba808093 -aa00b137 -a0010113 -fe20ac23 -ff80a183 -aa00beb7 -a00e8e93 -00700e13 -39d19c63 -00005097 -b8008093 -0aa01137 -aa010113 -fe20ae23 -ffc0a183 -0aa01eb7 -aa0e8e93 -00800e13 -37d19863 -00005097 -b5808093 -a00aa137 -00a10113 -0020a023 -0000a183 -a00aaeb7 -00ae8e93 -00900e13 -35d19463 -00005097 -b3408093 -12345137 -67810113 -fe008213 -02222023 -0000a183 -12345eb7 -678e8e93 -00a00e13 -31d19e63 -00005097 -b0808093 -58213137 -09810113 -ffd08093 -0020a3a3 -00005217 -af420213 -00022183 -58213eb7 -098e8e93 -00b00e13 -2fd19463 -00c00e13 -00000213 -aabbd0b7 -cdd08093 -00005117 -aa410113 -00112023 -00012183 -aabbdeb7 -cdde8e93 -2bd19e63 -00120213 -00200293 -fc521ae3 -00d00e13 -00000213 -daabc0b7 -ccd08093 -00005117 -a6c10113 -00000013 -00112223 -00412183 -daabceb7 -ccde8e93 -29d19063 -00120213 -00200293 -fc5218e3 -00e00e13 -00000213 -ddaac0b7 -bcc08093 -00005117 -a3010113 -00000013 -00000013 -00112423 -00812183 -ddaaceb7 -bcce8e93 -25d19063 -00120213 -00200293 -fc5216e3 -00f00e13 -00000213 -cddab0b7 -bbc08093 -00000013 -00005117 -9ec10113 -00112623 -00c12183 -cddabeb7 -bbce8e93 -21d19263 -00120213 -00200293 -fc5218e3 -01000e13 -00000213 -ccddb0b7 -abb08093 -00000013 -00005117 -9b010113 -00000013 -00112823 -01012183 -ccddbeb7 -abbe8e93 -1dd19263 -00120213 -00200293 -fc5216e3 -01100e13 -00000213 -bccde0b7 -aab08093 -00000013 -00000013 -00005117 -96c10113 -00112a23 -01412183 -bccdeeb7 -aabe8e93 -19d19263 -00120213 -00200293 -fc5216e3 -01200e13 -00000213 -00005117 -93c10113 -001120b7 -23308093 -00112023 -00012183 -00112eb7 -233e8e93 -15d19663 -00120213 -00200293 -fc521ae3 -01300e13 -00000213 -00005117 -90410113 -300110b7 -22308093 -00000013 -00112223 -00412183 -30011eb7 -223e8e93 -11d19863 -00120213 -00200293 -fc5218e3 -01400e13 -00000213 -00005117 -8c810113 -330010b7 -12208093 -00000013 -00000013 -00112423 -00812183 -33001eb7 -122e8e93 -0dd19863 -00120213 -00200293 -fc5216e3 -01500e13 -00000213 -00005117 -88810113 -00000013 -233000b7 -11208093 -00112623 -00c12183 -23300eb7 -112e8e93 -09d19a63 -00120213 -00200293 -fc5218e3 -01600e13 -00000213 -00005117 -84c10113 -00000013 -223300b7 -01108093 -00000013 -00112823 -01012183 -22330eb7 -011e8e93 -05d19a63 -00120213 -00200293 -fc5216e3 -01700e13 -00000213 -00005117 -80c10113 -00000013 -00000013 -122330b7 -00108093 -00112a23 -01412183 -12233eb7 -001e8e93 -01d19a63 -00120213 -00200293 -fc5216e3 -03c01a63 -10000537 -04500593 -05200613 -04f00693 -00a00713 -00b52023 -00c52023 -00c52023 -00d52023 -00c52023 -00e52023 -00100073 -10000537 -04f00593 -04b00613 -00a00693 -00b52023 -00c52023 -00d52023 -8a1fb06f -00000000 -00005537 -cc850513 -10000637 -00050583 -00058c63 -00b62023 -00150513 -ff1ff06f -70697561 -00000063 -02e00593 -00b62023 -00b62023 -00000013 -00002517 -71c50513 -004005ef -40b50533 -00002eb7 -710e8e93 -00200e13 -03d51463 -ffffe517 -8fc50513 -004005ef -40b50533 -ffffeeb7 -8f0e8e93 -00300e13 -01d51463 -03c01a63 -10000537 -04500593 -05200613 -04f00693 -00a00713 -00b52023 -00c52023 -00c52023 -00d52023 -00c52023 -00e52023 -00100073 -10000537 -04f00593 -04b00613 -00a00693 -00b52023 -00c52023 -00d52023 -f04fb06f -00005537 -d9450513 -10000637 -00050583 -00058c63 -00b62023 -00150513 -ff1ff06f -726c616a -00000000 -02e00593 -00b62023 -00b62023 -00200e13 -00000f93 -00000117 -01810113 -000109e7 -00000013 -00000013 -0e40006f -00000097 -ff008093 -00408093 -0d309a63 -00300e13 -00000f93 -00000197 -01418193 -00018067 -00000013 -0b80006f -0a0f9a63 -00400e13 -00000213 -00000317 -01030313 -000309e7 -09c01e63 -00120213 -00200293 -fe5214e3 -00500e13 -00000213 -00000317 -01430313 -00000013 -000309e7 -07c01a63 -00120213 -00200293 -fe5212e3 -00600e13 -00000213 -00000317 -01830313 -00000013 -00000013 -000309e7 -05c01463 -00120213 -00200293 -fe5210e3 -00100093 -00000117 -01c10113 -ffc109e7 -00108093 -00108093 -00108093 -00108093 -00108093 -00108093 -00400e93 -00700e13 -01d09463 -03c01a63 -10000537 -04500593 -05200613 -04f00693 -00a00713 -00b52023 -00c52023 -00c52023 -00d52023 -00c52023 -00e52023 -00100073 -10000537 -04f00593 -04b00613 -00a00693 -00b52023 -00c52023 -00d52023 -da4fb06f -00005537 -f1850513 -10000637 -00050583 -00058c63 -00b62023 -00150513 -ff1ff06f -75656762 -00000000 -02e00593 -00b62023 -00b62023 -00200e13 -00000093 -00000113 -0020f663 -35c01263 -01c01663 -fe20fee3 -33c01c63 -00300e13 -00100093 -00100113 -0020f663 -33c01263 -01c01663 -fe20fee3 -31c01c63 -00400e13 -fff00093 -fff00113 -0020f663 -31c01263 -01c01663 -fe20fee3 -2fc01c63 -00500e13 -00100093 -00000113 -0020f663 -2fc01263 -01c01663 -fe20fee3 -2dc01c63 -00600e13 -fff00093 -ffe00113 -0020f663 -2dc01263 -01c01663 -fe20fee3 -2bc01c63 -00700e13 -fff00093 -00000113 -0020f663 -2bc01263 -01c01663 -fe20fee3 -29c01c63 -00800e13 -00000093 -00100113 -0020f463 -01c01463 -29c01063 -fe20fee3 -00900e13 -ffe00093 -fff00113 -0020f463 -01c01463 -27c01263 -fe20fee3 -00a00e13 -00000093 -fff00113 -0020f463 -01c01463 -25c01463 -fe20fee3 -00b00e13 -800000b7 -fff08093 -80000137 -0020f463 -01c01463 -23c01463 -fe20fee3 -00c00e13 -00000213 -f00000b7 -fff08093 -f0000137 -2020f663 -00120213 -00200293 -fe5214e3 -00d00e13 -00000213 -f00000b7 -fff08093 -f0000137 -00000013 -1e20f263 -00120213 -00200293 -fe5212e3 -00e00e13 -00000213 -f00000b7 -fff08093 -f0000137 -00000013 -00000013 -1a20fc63 -00120213 -00200293 -fe5210e3 -00f00e13 -00000213 -f00000b7 -fff08093 -00000013 -f0000137 -1820f863 -00120213 -00200293 -fe5212e3 -01000e13 -00000213 -f00000b7 -fff08093 -00000013 -f0000137 -00000013 -1620f263 -00120213 -00200293 -fe5210e3 -01100e13 -00000213 -f00000b7 -fff08093 -00000013 -00000013 -f0000137 -1220fc63 -00120213 -00200293 -fe5210e3 -01200e13 -00000213 -f00000b7 -fff08093 -f0000137 -1020fa63 -00120213 -00200293 -fe5214e3 -01300e13 -00000213 -f00000b7 -fff08093 -f0000137 -00000013 -0e20f663 -00120213 -00200293 -fe5212e3 -01400e13 -00000213 -f00000b7 -fff08093 -f0000137 -00000013 -00000013 -0c20f063 -00120213 -00200293 -fe5210e3 -01500e13 -00000213 -f00000b7 -fff08093 -00000013 -f0000137 -0820fc63 -00120213 -00200293 -fe5212e3 -01600e13 -00000213 -f00000b7 -fff08093 -00000013 -f0000137 -00000013 -0620f663 -00120213 -00200293 -fe5210e3 -01700e13 -00000213 -f00000b7 -fff08093 -00000013 -00000013 -f0000137 -0420f063 -00120213 -00200293 -fe5210e3 -00100093 -0000fa63 -00108093 -00108093 -00108093 -00108093 -00108093 -00108093 -00300e93 -01800e13 -01d09463 -03c01a63 -10000537 -04500593 -05200613 -04f00693 -00a00713 -00b52023 -00c52023 -00c52023 -00d52023 -00c52023 -00e52023 -00100073 -10000537 -04f00593 -04b00613 -00a00693 -00b52023 -00c52023 -00d52023 -a14fb06f -00005537 -2f050513 -10000637 -00050583 -00058a63 -00b62023 -00150513 -ff1ff06f -0000776c -02e00593 -00b62023 -00b62023 -00004097 -14c08093 -0000a183 -00ff0eb7 -0ffe8e93 -00200e13 -27d19a63 -00004097 -13008093 -0040a183 -ff010eb7 -f00e8e93 -00300e13 -25d19c63 -00004097 -11408093 -0080a183 -0ff01eb7 -ff0e8e93 -00400e13 -23d19e63 -00004097 -0f808093 -00c0a183 -f00ffeb7 -00fe8e93 -00500e13 -23d19063 -00004097 -0e808093 -ff40a183 -00ff0eb7 -0ffe8e93 -00600e13 -21d19263 -00004097 -0cc08093 -ff80a183 -ff010eb7 -f00e8e93 -00700e13 -1fd19463 -00004097 -0b008093 -ffc0a183 -0ff01eb7 -ff0e8e93 -00800e13 -1dd19663 -00004097 -09408093 -0000a183 -f00ffeb7 -00fe8e93 -00900e13 -1bd19863 -00004097 -06c08093 -fe008093 -0200a183 -00ff0eb7 -0ffe8e93 -00a00e13 -19d19863 -00004097 -04c08093 -ffd08093 -0070a183 -ff010eb7 -f00e8e93 -00b00e13 -17d19863 -00c00e13 -00000213 -00004097 -02808093 -0040a183 -00018313 -0ff01eb7 -ff0e8e93 -15d31663 -00120213 -00200293 -fc521ee3 -00d00e13 -00000213 -00004097 -ffc08093 -0040a183 -00000013 -00018313 -f00ffeb7 -00fe8e93 -11d31c63 -00120213 -00200293 -fc521ce3 -00e00e13 -00000213 -00004097 -fc008093 -0040a183 -00000013 -00000013 -00018313 -ff010eb7 -f00e8e93 -0fd31063 -00120213 -00200293 -fc521ae3 -00f00e13 -00000213 -00004097 -f8c08093 -0040a183 -0ff01eb7 -ff0e8e93 -0bd19a63 -00120213 -00200293 -fe5210e3 -01000e13 -00000213 -00004097 -f6408093 -00000013 -0040a183 -f00ffeb7 -00fe8e93 -09d19263 -00120213 -00200293 -fc521ee3 -01100e13 -00000213 -00004097 -f2c08093 -00000013 -00000013 -0040a183 -ff010eb7 -f00e8e93 -05d19863 -00120213 -00200293 -fc521ce3 -00004197 -f0018193 -0001a103 -00200113 -00200e93 -01200e13 -03d11463 -00004197 -ee418193 -0001a103 -00000013 -00200113 -00200e93 -01300e13 -01d11463 -03c01a63 -10000537 -04500593 -05200613 -04f00693 -00a00713 -00b52023 -00c52023 -00c52023 -00d52023 -00c52023 -00e52023 -00100073 -10000537 -04f00593 -04b00613 -00a00693 -00b52023 -00c52023 -00d52023 -f2dfa06f -00005537 -5fc50513 -10000637 -00050583 -00058c63 -00b62023 -00150513 -ff1ff06f -69746c73 -00000000 -02e00593 -00b62023 -00b62023 -00000093 -0000a193 -00000e93 -00200e13 -27d19263 -00100093 -0010a193 -00000e93 -00300e13 -25d19863 -00300093 -0070a193 -00100e93 -00400e13 -23d19e63 -00700093 -0030a193 -00000e93 -00500e13 -23d19463 -00000093 -8000a193 -00000e93 -00600e13 -21d19a63 -800000b7 -0000a193 -00100e93 -00700e13 -21d19063 -800000b7 -8000a193 -00100e93 -00800e13 -1fd19663 -00000093 -7ff0a193 -00100e93 -00900e13 -1dd19c63 -800000b7 -fff08093 -0000a193 -00000e93 -00a00e13 -1dd19063 -800000b7 -fff08093 -7ff0a193 -00000e93 -00b00e13 -1bd19463 -800000b7 -7ff0a193 -00100e93 -00c00e13 -19d19a63 -800000b7 -fff08093 -8000a193 -00000e93 -00d00e13 -17d19e63 -00000093 -fff0a193 -00000e93 -00e00e13 -17d19463 -fff00093 -0010a193 -00100e93 -00f00e13 -15d19a63 -fff00093 -fff0a193 -00000e93 -01000e13 -15d19063 -00b00093 -00d0b093 -00100e93 -01100e13 -13d09663 -00000213 -00f00093 -00a0a193 -00018313 -00120213 -00200293 -fe5216e3 -00000e93 -01200e13 -11d31263 -00000213 -00a00093 -0100a193 -00000013 -00018313 -00120213 -00200293 -fe5214e3 -00100e93 -01300e13 -0dd31c63 -00000213 -01000093 -0090a193 -00000013 -00000013 -00018313 -00120213 -00200293 -fe5212e3 -00000e93 -01400e13 -0bd31463 -00000213 -00b00093 -00f0a193 -00120213 -00200293 -fe5218e3 -00100e93 -01500e13 -09d19263 -00000213 -01100093 -00000013 -0080a193 -00120213 -00200293 -fe5216e3 -00000e93 -01600e13 -05d19e63 -00000213 -00c00093 -00000013 -00000013 -00e0a193 -00120213 -00200293 -fe5214e3 -00100e93 -01700e13 -03d19863 -fff02093 -00000e93 -01800e13 -03d09063 -00ff00b7 -0ff08093 -fff0a013 -00000e93 -01900e13 -01d01463 -03c01a63 -10000537 -04500593 -05200613 -04f00693 -00a00713 -00b52023 -00c52023 -00c52023 -00d52023 -00c52023 -00e52023 -00100073 -10000537 -04f00593 -04b00613 -00a00693 -00b52023 -00c52023 -00d52023 -c89fa06f -00006537 -8f450513 -10000637 -00050583 -00058a63 -00b62023 -00150513 -ff1ff06f -00746c73 -02e00593 -00b62023 -00b62023 -00000093 -00000113 -0020a1b3 -00000e93 -00200e13 -4bd19a63 -00100093 -00100113 -0020a1b3 -00000e93 -00300e13 -49d19e63 -00300093 -00700113 -0020a1b3 -00100e93 -00400e13 -49d19263 -00700093 -00300113 -0020a1b3 -00000e93 -00500e13 -47d19663 -00000093 -ffff8137 -0020a1b3 -00000e93 -00600e13 -45d19a63 -800000b7 -00000113 -0020a1b3 -00100e93 -00700e13 -43d19e63 -800000b7 -ffff8137 -0020a1b3 -00100e93 -00800e13 -43d19263 -00000093 -00008137 -fff10113 -0020a1b3 -00100e93 -00900e13 -41d19463 -800000b7 -fff08093 -00000113 -0020a1b3 -00000e93 -00a00e13 -3fd19663 -800000b7 -fff08093 -00008137 -fff10113 -0020a1b3 -00000e93 -00b00e13 -3dd19663 -800000b7 -00008137 -fff10113 -0020a1b3 -00100e93 -00c00e13 -3bd19863 -800000b7 -fff08093 -ffff8137 -0020a1b3 -00000e93 -00d00e13 -39d19a63 -00000093 -fff00113 -0020a1b3 -00000e93 -00e00e13 -37d19e63 -fff00093 -00100113 -0020a1b3 -00100e93 -00f00e13 -37d19263 -fff00093 -fff00113 -0020a1b3 -00000e93 -01000e13 -35d19663 -00e00093 -00d00113 -0020a0b3 -00000e93 -01100e13 -33d09a63 -00b00093 -00d00113 -0020a133 -00100e93 -01200e13 -31d11e63 -00d00093 -0010a0b3 -00000e93 -01300e13 -31d09463 -00000213 -00b00093 -00d00113 -0020a1b3 -00018313 -00120213 -00200293 -fe5214e3 -00100e93 -01400e13 -2dd31e63 -00000213 -00e00093 -00d00113 -0020a1b3 -00000013 -00018313 -00120213 -00200293 -fe5212e3 -00000e93 -01500e13 -2bd31663 -00000213 -00c00093 -00d00113 -0020a1b3 -00000013 -00000013 -00018313 -00120213 -00200293 -fe5210e3 -00100e93 -01600e13 -27d31c63 -00000213 -00e00093 -00d00113 -0020a1b3 -00120213 -00200293 -fe5216e3 -00000e93 -01700e13 -25d19863 -00000213 -00b00093 -00d00113 -00000013 -0020a1b3 -00120213 -00200293 -fe5214e3 -00100e93 -01800e13 -23d19263 -00000213 -00f00093 -00d00113 -00000013 -00000013 -0020a1b3 -00120213 -00200293 -fe5212e3 -00000e93 -01900e13 -1fd19a63 -00000213 -00a00093 -00000013 -00d00113 -0020a1b3 -00120213 -00200293 -fe5214e3 -00100e93 -01a00e13 -1dd19463 -00000213 -01000093 -00000013 -00d00113 -00000013 -0020a1b3 -00120213 -00200293 -fe5212e3 -00000e93 -01b00e13 -19d19c63 -00000213 -00900093 -00000013 -00000013 -00d00113 -0020a1b3 -00120213 -00200293 -fe5212e3 -00100e93 -01c00e13 -17d19463 -00000213 -00d00113 -01100093 -0020a1b3 -00120213 -00200293 -fe5216e3 -00000e93 -01d00e13 -15d19063 -00000213 -00d00113 -00800093 -00000013 -0020a1b3 -00120213 -00200293 -fe5214e3 -00100e93 -01e00e13 -11d19a63 -00000213 -00d00113 -01200093 -00000013 -00000013 -0020a1b3 -00120213 -00200293 -fe5212e3 -00000e93 -01f00e13 -0fd19263 -00000213 -00d00113 -00000013 -00700093 -0020a1b3 -00120213 -00200293 -fe5214e3 -00100e93 -02000e13 -0bd19c63 -00000213 -00d00113 -00000013 -01300093 -00000013 -0020a1b3 -00120213 -00200293 -fe5212e3 -00000e93 -02100e13 -09d19463 -00000213 -00d00113 -00000013 -00000013 -00600093 -0020a1b3 -00120213 -00200293 -fe5212e3 -00100e93 -02200e13 -05d19c63 -fff00093 -00102133 -00000e93 -02300e13 -05d11263 -fff00093 -0000a133 -00100e93 -02400e13 -03d11863 -000020b3 -00000e93 -02500e13 -03d09063 -01000093 -01e00113 -0020a033 -00000e93 -02600e13 -01d01463 -03c01a63 -10000537 -04500593 -05200613 -04f00693 -00a00713 -00b52023 -00c52023 -00c52023 -00d52023 -00c52023 -00e52023 -00100073 -10000537 -04f00593 -04b00613 -00a00693 -00b52023 -00c52023 -00d52023 -fb8fa06f -00006537 -e3c50513 -10000637 -00050583 -00058a63 -00b62023 -00150513 -ff1ff06f -0075626c -02e00593 -00b62023 -00b62023 -00003097 -61008093 -0000c183 -0ff00e93 -00200e13 -23d19c63 -00003097 -5f808093 -0010c183 -00000e93 -00300e13 -23d19063 -00003097 -5e008093 -0020c183 -0f000e93 -00400e13 -21d19463 -00003097 -5c808093 -0030c183 -00f00e93 -00500e13 -1fd19863 -00003097 -5b308093 -ffd0c183 -0ff00e93 -00600e13 -1dd19c63 -00003097 -59b08093 -ffe0c183 -00000e93 -00700e13 -1dd19063 -00003097 -58308093 -fff0c183 -0f000e93 -00800e13 -1bd19463 -00003097 -56b08093 -0000c183 -00f00e93 -00900e13 -19d19863 -00003097 -55008093 -fe008093 -0200c183 -0ff00e93 -00a00e13 -17d19a63 -00003097 -53408093 -ffa08093 -0070c183 -00000e93 -00b00e13 -15d19c63 -00c00e13 -00000213 -00003097 -51108093 -0010c183 -00018313 -0f000e93 -13d31c63 -00120213 -00200293 -fe5210e3 -00d00e13 -00000213 -00003097 -4e608093 -0010c183 -00000013 -00018313 -00f00e93 -11d31463 -00120213 -00200293 -fc521ee3 -00e00e13 -00000213 -00003097 -4b408093 -0010c183 -00000013 -00000013 -00018313 -00000e93 -0dd31a63 -00120213 -00200293 -fc521ce3 -00f00e13 -00000213 -00003097 -48108093 -0010c183 -0f000e93 -0bd19663 -00120213 -00200293 -fe5212e3 -01000e13 -00000213 -00003097 -45a08093 -00000013 -0010c183 -00f00e93 -09d19063 -00120213 -00200293 -fe5210e3 -01100e13 -00000213 -00003097 -42c08093 -00000013 -00000013 -0010c183 -00000e93 -05d19863 -00120213 -00200293 -fc521ee3 -00003197 -40418193 -0001c103 -00200113 -00200e93 -01200e13 -03d11463 -00003197 -3e818193 -0001c103 -00000013 -00200113 -00200e93 -01300e13 -01d11463 -03c01a63 -10000537 -04500593 -05200613 -04f00693 -00a00713 -00b52023 -00c52023 -00c52023 -00d52023 -00c52023 -00e52023 -00100073 -10000537 -04f00593 -04b00613 -00a00693 -00b52023 -00c52023 -00d52023 -c2cfa06f -00006537 -10850513 -10000637 -00050583 -00058a63 -00b62023 -00150513 -ff1ff06f -0075686c -02e00593 -00b62023 -00b62023 -00003097 -34808093 -0000d183 -0ff00e93 -00200e13 -27d19663 -00003097 -33008093 -0020d183 -00010eb7 -f00e8e93 -00300e13 -25d19863 -00003097 -31408093 -0040d183 -00001eb7 -ff0e8e93 -00400e13 -23d19a63 -00003097 -2f808093 -0060d183 -0000feb7 -00fe8e93 -00500e13 -21d19c63 -00003097 -2e208093 -ffa0d183 -0ff00e93 -00600e13 -21d19063 -00003097 -2ca08093 -ffc0d183 -00010eb7 -f00e8e93 -00700e13 -1fd19263 -00003097 -2ae08093 -ffe0d183 -00001eb7 -ff0e8e93 -00800e13 -1dd19463 -00003097 -29208093 -0000d183 -0000feb7 -00fe8e93 -00900e13 -1bd19663 -00003097 -27008093 -fe008093 -0200d183 -0ff00e93 -00a00e13 -19d19863 -00003097 -25408093 -ffb08093 -0070d183 -00010eb7 -f00e8e93 -00b00e13 -17d19863 -00c00e13 -00000213 -00003097 -22e08093 -0020d183 -00018313 -00001eb7 -ff0e8e93 -15d31663 -00120213 -00200293 -fc521ee3 -00d00e13 -00000213 -00003097 -20008093 -0020d183 -00000013 -00018313 -0000feb7 -00fe8e93 -11d31c63 -00120213 -00200293 -fc521ce3 -00e00e13 -00000213 -00003097 -1c808093 -0020d183 -00000013 -00000013 -00018313 -00010eb7 -f00e8e93 -0fd31063 -00120213 -00200293 -fc521ae3 -00f00e13 -00000213 -00003097 -19208093 -0020d183 -00001eb7 -ff0e8e93 -0bd19a63 -00120213 -00200293 -fe5210e3 -01000e13 -00000213 -00003097 -16808093 -00000013 -0020d183 -0000feb7 -00fe8e93 -09d19263 -00120213 -00200293 -fc521ee3 -01100e13 -00000213 -00003097 -13408093 -00000013 -00000013 -0020d183 -00010eb7 -f00e8e93 -05d19863 -00120213 -00200293 -fc521ce3 -00003197 -10818193 -0001d103 -00200113 -00200e93 -01200e13 -03d11463 -00003197 -0ec18193 -0001d103 -00000013 -00200113 -00200e93 -01300e13 -01d11463 -03c01a63 -10000537 -04500593 -05200613 -04f00693 -00a00713 -00b52023 -00c52023 -00c52023 -00d52023 -00c52023 -00e52023 -00100073 -10000537 -04f00593 -04b00613 -00a00693 -00b52023 -00c52023 -00d52023 -938fa06f -00006537 -40850513 -10000637 -00050583 -00058a63 -00b62023 -00150513 -ff1ff06f -0069756c -02e00593 -00b62023 -00b62023 -000000b7 -00000e93 -00200e13 -05d09a63 -fffff0b7 -4010d093 -80000e93 -00300e13 -05d09063 -7ffff0b7 -4140d093 -7ff00e93 -00400e13 -03d09663 -800000b7 -4140d093 -80000e93 -00500e13 -01d09c63 -80000037 -00000e93 -00600e13 -01d01463 -03c01a63 -10000537 -04500593 -05200613 -04f00693 -00a00713 -00b52023 -00c52023 -00c52023 -00d52023 -00c52023 -00e52023 -00100073 -10000537 -04f00593 -04b00613 -00a00693 -00b52023 -00c52023 -00d52023 -fa5f906f -00006537 -4e850513 -10000637 -00050583 -00058a63 -00b62023 -00150513 -ff1ff06f -006c6c73 -02e00593 -00b62023 -00b62023 -00100093 -00000113 -002091b3 -00100e93 -00200e13 -55d19c63 -00100093 -00100113 -002091b3 -00200e93 -00300e13 -55d19063 -00100093 -00700113 -002091b3 -08000e93 -00400e13 -53d19463 -00100093 -00e00113 -002091b3 -00004eb7 -00500e13 -51d19863 -00100093 -01f00113 -002091b3 -80000eb7 -00600e13 -4fd19c63 -fff00093 -00000113 -002091b3 -fff00e93 -00700e13 -4fd19063 -fff00093 -00100113 -002091b3 -ffe00e93 -00800e13 -4dd19463 -fff00093 -00700113 -002091b3 -f8000e93 -00900e13 -4bd19863 -fff00093 -00e00113 -002091b3 -ffffceb7 -00a00e13 -49d19c63 -fff00093 -01f00113 -002091b3 -80000eb7 -00b00e13 -49d19063 -212120b7 -12108093 -00000113 -002091b3 -21212eb7 -121e8e93 -00c00e13 -47d19063 -212120b7 -12108093 -00100113 -002091b3 -42424eb7 -242e8e93 -00d00e13 -45d19063 -212120b7 -12108093 -00700113 -002091b3 -90909eb7 -080e8e93 -00e00e13 -43d19063 -212120b7 -12108093 -00e00113 -002091b3 -48484eb7 -00f00e13 -41d19263 -212120b7 -12108093 -01f00113 -002091b3 -80000eb7 -01000e13 -3fd19463 -212120b7 -12108093 -fe000113 -002091b3 -21212eb7 -121e8e93 -01100e13 -3dd19463 -212120b7 -12108093 -fe100113 -002091b3 -42424eb7 -242e8e93 -01200e13 -3bd19463 -212120b7 -12108093 -fe700113 -002091b3 -90909eb7 -080e8e93 -01300e13 -39d19463 -212120b7 -12108093 -fee00113 -002091b3 -48484eb7 -01400e13 -37d19663 -212120b7 -12008093 -fff00113 -002091b3 -00000e93 -01500e13 -35d19863 -00100093 -00700113 -002090b3 -08000e93 -01600e13 -33d09c63 -00100093 -00e00113 -00209133 -00004eb7 -01700e13 -33d11063 -00300093 -001090b3 -01800e93 -01800e13 -31d09663 -00000213 -00100093 -00700113 -002091b3 -00018313 -00120213 -00200293 -fe5214e3 -08000e93 -01900e13 -2fd31063 -00000213 -00100093 -00e00113 -002091b3 -00000013 -00018313 -00120213 -00200293 -fe5212e3 -00004eb7 -01a00e13 -2bd31863 -00000213 -00100093 -01f00113 -002091b3 -00000013 -00000013 -00018313 -00120213 -00200293 -fe5210e3 -80000eb7 -01b00e13 -27d31e63 -00000213 -00100093 -00700113 -002091b3 -00120213 -00200293 -fe5216e3 -08000e93 -01c00e13 -25d19a63 -00000213 -00100093 -00e00113 -00000013 -002091b3 -00120213 -00200293 -fe5214e3 -00004eb7 -01d00e13 -23d19463 -00000213 -00100093 -01f00113 -00000013 -00000013 -002091b3 -00120213 -00200293 -fe5212e3 -80000eb7 -01e00e13 -1fd19c63 -00000213 -00100093 -00000013 -00700113 -002091b3 -00120213 -00200293 -fe5214e3 -08000e93 -01f00e13 -1dd19663 -00000213 -00100093 -00000013 -00e00113 -00000013 -002091b3 -00120213 -00200293 -fe5212e3 -00004eb7 -02000e13 -19d19e63 -00000213 -00100093 -00000013 -00000013 -01f00113 -002091b3 -00120213 -00200293 -fe5212e3 -80000eb7 -02100e13 -17d19663 -00000213 -00700113 -00100093 -002091b3 -00120213 -00200293 -fe5216e3 -08000e93 -02200e13 -15d19263 -00000213 -00e00113 -00100093 -00000013 -002091b3 -00120213 -00200293 -fe5214e3 -00004eb7 -02300e13 -11d19c63 -00000213 -01f00113 -00100093 -00000013 -00000013 -002091b3 -00120213 -00200293 -fe5212e3 -80000eb7 -02400e13 -0fd19463 -00000213 -00700113 -00000013 -00100093 -002091b3 -00120213 -00200293 -fe5214e3 -08000e93 -02500e13 -0bd19e63 -00000213 -00e00113 -00000013 -00100093 -00000013 -002091b3 -00120213 -00200293 -fe5212e3 -00004eb7 -02600e13 -09d19663 -00000213 -01f00113 -00000013 -00000013 -00100093 -002091b3 -00120213 -00200293 -fe5212e3 -80000eb7 -02700e13 -05d19e63 -00f00093 -00101133 -00000e93 -02800e13 -05d11463 -02000093 -00009133 -02000e93 -02900e13 -03d11a63 -000010b3 -00000e93 -02a00e13 -03d09263 -40000093 -00001137 -80010113 -00209033 -00000e93 -02b00e13 -01d01463 -03c01a63 -10000537 -04500593 -05200613 -04f00693 -00a00713 -00b52023 -00c52023 -00c52023 -00d52023 -00c52023 -00e52023 -00100073 -10000537 -04f00593 -04b00613 -00a00693 -00b52023 -00c52023 -00d52023 -b15f906f -00007537 -ad450513 -10000637 -00050583 -00058c63 -00b62023 -00150513 -ff1ff06f -696c6c73 -00000000 -02e00593 -00b62023 -00b62023 -00100093 -00009193 -00100e93 -00200e13 -27d19a63 -00100093 -00109193 -00200e93 -00300e13 -27d19063 -00100093 -00709193 -08000e93 -00400e13 -25d19663 -00100093 -00e09193 -00004eb7 -00500e13 -23d19c63 -00100093 -01f09193 -80000eb7 -00600e13 -23d19263 -fff00093 -00009193 -fff00e93 -00700e13 -21d19863 -fff00093 -00109193 -ffe00e93 -00800e13 -1fd19e63 -fff00093 -00709193 -f8000e93 -00900e13 -1fd19463 -fff00093 -00e09193 -ffffceb7 -00a00e13 -1dd19a63 -fff00093 -01f09193 -80000eb7 -00b00e13 -1dd19063 -212120b7 -12108093 -00009193 -21212eb7 -121e8e93 -00c00e13 -1bd19263 -212120b7 -12108093 -00109193 -42424eb7 -242e8e93 -00d00e13 -19d19463 -212120b7 -12108093 -00709193 -90909eb7 -080e8e93 -00e00e13 -17d19663 -212120b7 -12108093 -00e09193 -48484eb7 -00f00e13 -15d19a63 -212120b7 -12108093 -01f09193 -80000eb7 -01000e13 -13d19e63 -00100093 -00709093 -08000e93 -01100e13 -13d09463 -00000213 -00100093 -00709193 -00018313 -00120213 -00200293 -fe5216e3 -08000e93 -01200e13 -11d31063 -00000213 -00100093 -00e09193 -00000013 -00018313 -00120213 -00200293 -fe5214e3 -00004eb7 -01300e13 -0dd31a63 -00000213 -00100093 -01f09193 -00000013 -00000013 -00018313 -00120213 -00200293 -fe5212e3 -80000eb7 -01400e13 -0bd31263 -00000213 -00100093 -00709193 -00120213 -00200293 -fe5218e3 -08000e93 -01500e13 -09d19063 -00000213 -00100093 -00000013 -00e09193 -00120213 -00200293 -fe5216e3 -00004eb7 -01600e13 -05d19c63 -00000213 -00100093 -00000013 -00000013 -01f09193 -00120213 -00200293 -fe5214e3 -80000eb7 -01700e13 -03d19663 -01f01093 -00000e93 -01800e13 -01d09e63 -02100093 -01409013 -00000e93 -01900e13 -01d01463 -03c01a63 -10000537 -04500593 -05200613 -04f00693 -00a00713 -00b52023 -00c52023 -00c52023 -00d52023 -00c52023 -00e52023 -00100073 -10000537 -04f00593 -04b00613 -00a00693 -00b52023 -00c52023 -00d52023 -fd0f906f -00007537 -ddc50513 -10000637 -00050583 -00058c63 -00b62023 -00150513 -ff1ff06f -69646e61 -00000000 -02e00593 -00b62023 -00b62023 -ff0100b7 -f0008093 -f0f0f193 -ff010eb7 -f00e8e93 -00200e13 -1bd19463 -0ff010b7 -ff008093 -0f00f193 -0f000e93 -00300e13 -19d19863 -00ff00b7 -0ff08093 -70f0f193 -00f00e93 -00400e13 -17d19c63 -f00ff0b7 -00f08093 -0f00f193 -00000e93 -00500e13 -17d19063 -ff0100b7 -f0008093 -0f00f093 -00000e93 -00600e13 -15d09463 -00000213 -0ff010b7 -ff008093 -70f0f193 -00018313 -00120213 -00200293 -fe5214e3 -70000e93 -00700e13 -11d31e63 -00000213 -00ff00b7 -0ff08093 -0f00f193 -00000013 -00018313 -00120213 -00200293 -fe5212e3 -0f000e93 -00800e13 -0fd31663 -00000213 -f00ff0b7 -00f08093 -f0f0f193 -00000013 -00000013 -00018313 -00120213 -00200293 -fe5210e3 -f00ffeb7 -00fe8e93 -00900e13 -0bd31a63 -00000213 -0ff010b7 -ff008093 -70f0f193 -00120213 -00200293 -fe5216e3 -70000e93 -00a00e13 -09d19663 -00000213 -00ff00b7 -0ff08093 -00000013 -0f00f193 -00120213 -00200293 -fe5214e3 -0f000e93 -00b00e13 -07d19063 -00000213 -f00ff0b7 -00f08093 -00000013 -00000013 -70f0f193 -00120213 -00200293 -fe5212e3 -00f00e93 -00c00e13 -03d19863 -0f007093 -00000e93 -00d00e13 -03d09063 -00ff00b7 -0ff08093 -70f0f013 -00000e93 -00e00e13 -01d01463 -03c01a63 -10000537 -04500593 -05200613 -04f00693 -00a00713 -00b52023 -00c52023 -00c52023 -00d52023 -00c52023 -00e52023 -00100073 -10000537 -04f00593 -04b00613 -00a00693 -00b52023 -00c52023 -00d52023 -d80f906f -00007537 -02050513 -10000637 -00050583 -00058a63 -00b62023 -00150513 -ff1ff06f -0069726f -02e00593 -00b62023 -00b62023 -ff0100b7 -f0008093 -f0f0e193 -f0f00e93 -00200e13 -1dd19463 -0ff010b7 -ff008093 -0f00e193 -0ff01eb7 -ff0e8e93 -00300e13 -1bd19663 -00ff00b7 -0ff08093 -70f0e193 -00ff0eb7 -7ffe8e93 -00400e13 -19d19863 -f00ff0b7 -00f08093 -0f00e193 -f00ffeb7 -0ffe8e93 -00500e13 -17d19a63 -ff0100b7 -f0008093 -0f00e093 -ff010eb7 -ff0e8e93 -00600e13 -15d09c63 -00000213 -0ff010b7 -ff008093 -0f00e193 -00018313 -00120213 -00200293 -fe5214e3 -0ff01eb7 -ff0e8e93 -00700e13 -13d31463 -00000213 -00ff00b7 -0ff08093 -70f0e193 -00000013 -00018313 -00120213 -00200293 -fe5212e3 -00ff0eb7 -7ffe8e93 -00800e13 -0fd31a63 -00000213 -f00ff0b7 -00f08093 -0f00e193 -00000013 -00000013 -00018313 -00120213 -00200293 -fe5210e3 -f00ffeb7 -0ffe8e93 -00900e13 -0bd31e63 -00000213 -0ff010b7 -ff008093 -0f00e193 -00120213 -00200293 -fe5216e3 -0ff01eb7 -ff0e8e93 -00a00e13 -09d19863 -00000213 -00ff00b7 -0ff08093 -00000013 -f0f0e193 -00120213 -00200293 -fe5214e3 -fff00e93 -00b00e13 -07d19263 -00000213 -f00ff0b7 -00f08093 -00000013 -00000013 -0f00e193 -00120213 -00200293 -fe5212e3 -f00ffeb7 -0ffe8e93 -00c00e13 -03d19863 -0f006093 -0f000e93 -00d00e13 -03d09063 -00ff00b7 -0ff08093 -70f0e013 -00000e93 -00e00e13 -01d01463 -03c01a63 -10000537 -04500593 -05200613 -04f00693 -00a00713 -00b52023 -00c52023 -00c52023 -00d52023 -00c52023 -00e52023 -00100073 -10000537 -04f00593 -04b00613 -00a00693 -00b52023 -00c52023 -00d52023 -b18f906f -00007537 -27c50513 -10000637 -00050583 -00058c63 -00b62023 -00150513 -ff1ff06f -696c7273 -00000000 -02e00593 -00b62023 -00b62023 -ffff80b7 -0000d193 -ffff8eb7 -00200e13 -2bd19263 -ffff80b7 -0010d193 -7fffceb7 -00300e13 -29d19863 -ffff80b7 -0070d193 -02000eb7 -f00e8e93 -00400e13 -27d19c63 -ffff80b7 -00e0d193 -00040eb7 -ffee8e93 -00500e13 -27d19063 -ffff80b7 -00108093 -00f0d193 -00020eb7 -fffe8e93 -00600e13 -25d19263 -fff00093 -0000d193 -fff00e93 -00700e13 -23d19863 -fff00093 -0010d193 -80000eb7 -fffe8e93 -00800e13 -21d19c63 -fff00093 -0070d193 -02000eb7 -fffe8e93 -00900e13 -21d19063 -fff00093 -00e0d193 -00040eb7 -fffe8e93 -00a00e13 -1fd19463 -fff00093 -01f0d193 -00100e93 -00b00e13 -1dd19a63 -212120b7 -12108093 -0000d193 -21212eb7 -121e8e93 -00c00e13 -1bd19c63 -212120b7 -12108093 -0010d193 -10909eb7 -090e8e93 -00d00e13 -19d19e63 -212120b7 -12108093 -0070d193 -00424eb7 -242e8e93 -00e00e13 -19d19063 -212120b7 -12108093 -00e0d193 -00008eb7 -484e8e93 -00f00e13 -17d19263 -212120b7 -12108093 -01f0d193 -00000e93 -01000e13 -15d19663 -ffff80b7 -0010d093 -7fffceb7 -01500e13 -13d09c63 -00000213 -ffff80b7 -0010d193 -00018313 -00120213 -00200293 -fe5216e3 -7fffceb7 -01600e13 -11d31863 -00000213 -ffff80b7 -00e0d193 -00000013 -00018313 -00120213 -00200293 -fe5214e3 -00040eb7 -ffee8e93 -01700e13 -0fd31063 -00000213 -ffff80b7 -00f0d193 -00000013 -00000013 -00018313 -00120213 -00200293 -fe5212e3 -00020eb7 -fffe8e93 -01800e13 -0bd31663 -00000213 -ffff80b7 -0010d193 -00120213 -00200293 -fe5218e3 -7fffceb7 -01900e13 -09d19463 -00000213 -ffff80b7 -00000013 -00e0d193 -00120213 -00200293 -fe5216e3 -00040eb7 -ffee8e93 -01a00e13 -05d19e63 -00000213 -ffff80b7 -00000013 -00000013 -00f0d193 -00120213 -00200293 -fe5214e3 -00020eb7 -fffe8e93 -01b00e13 -03d19663 -01f05093 -00000e93 -01c00e13 -01d09e63 -02100093 -0140d013 -00000e93 -01d00e13 -01d01463 -03c01a63 -10000537 -04500593 -05200613 -04f00693 -00a00713 -00b52023 -00c52023 -00c52023 -00d52023 -00c52023 -00e52023 -00100073 -10000537 -04f00593 -04b00613 -00a00693 -00b52023 -00c52023 -00d52023 -804f906f -00007537 -5b450513 -10000637 -00050583 -00058a63 -00b62023 -00150513 -ff1ff06f -006c616a -02e00593 -00b62023 -00b62023 -00200e13 -00000093 -010000ef -00000013 -00000013 -0440006f -00000117 -ff010113 -00410113 -02111a63 -00100113 -014000ef -00110113 -00110113 -00110113 -00110113 -00110113 -00110113 -00300e93 -00300e13 -01d11463 -03c01a63 -10000537 -04500593 -05200613 -04f00693 -00a00713 -00b52023 -00c52023 -00c52023 -00d52023 -00c52023 -00e52023 -00100073 -10000537 -04f00593 -04b00613 -00a00693 -00b52023 -00c52023 -00d52023 -e25f806f -00007537 -68c50513 -10000637 -00050583 -00058c63 -00b62023 -00150513 -ff1ff06f -706d6973 -0000656c -02e00593 -00b62023 -00b62023 -10000537 -04f00593 -04b00613 -00a00693 -00b52023 -00c52023 -00d52023 -f5df806f -00007537 -6e050513 -10000637 -00050583 -00058a63 -00b62023 -00150513 -ff1ff06f -00646461 -02e00593 -00b62023 -00b62023 -00000093 -00000113 -002081b3 -00000e93 -00200e13 -4dd19663 -00100093 -00100113 -002081b3 -00200e93 -00300e13 -4bd19a63 -00300093 -00700113 -002081b3 -00a00e93 -00400e13 -49d19e63 -00000093 -ffff8137 -002081b3 -ffff8eb7 -00500e13 -49d19263 -800000b7 -00000113 -002081b3 -80000eb7 -00600e13 -47d19663 -800000b7 -ffff8137 -002081b3 -7fff8eb7 -00700e13 -45d19a63 -00000093 -00008137 -fff10113 -002081b3 -00008eb7 -fffe8e93 -00800e13 -43d19a63 -800000b7 -fff08093 -00000113 -002081b3 -80000eb7 -fffe8e93 -00900e13 -41d19a63 -800000b7 -fff08093 -00008137 -fff10113 -002081b3 -80008eb7 -ffee8e93 -00a00e13 -3fd19863 -800000b7 -00008137 -fff10113 -002081b3 -80008eb7 -fffe8e93 -00b00e13 -3dd19863 -800000b7 -fff08093 -ffff8137 -002081b3 -7fff8eb7 -fffe8e93 -00c00e13 -3bd19863 -00000093 -fff00113 -002081b3 -fff00e93 -00d00e13 -39d19c63 -fff00093 -00100113 -002081b3 -00000e93 -00e00e13 -39d19063 -fff00093 -fff00113 -002081b3 -ffe00e93 -00f00e13 -37d19463 -00100093 -80000137 -fff10113 -002081b3 -80000eb7 -01000e13 -35d19663 -00d00093 -00b00113 -002080b3 -01800e93 -01100e13 -33d09a63 -00e00093 -00b00113 -00208133 -01900e93 -01200e13 -31d11e63 -00d00093 -001080b3 -01a00e93 -01300e13 -31d09463 -00000213 -00d00093 -00b00113 -002081b3 -00018313 -00120213 -00200293 -fe5214e3 -01800e93 -01400e13 -2dd31e63 -00000213 -00e00093 -00b00113 -002081b3 -00000013 -00018313 -00120213 -00200293 -fe5212e3 -01900e93 -01500e13 -2bd31663 -00000213 -00f00093 -00b00113 -002081b3 -00000013 -00000013 -00018313 -00120213 -00200293 -fe5210e3 -01a00e93 -01600e13 -27d31c63 -00000213 -00d00093 -00b00113 -002081b3 -00120213 -00200293 -fe5216e3 -01800e93 -01700e13 -25d19863 -00000213 -00e00093 -00b00113 -00000013 -002081b3 -00120213 -00200293 -fe5214e3 -01900e93 -01800e13 -23d19263 -00000213 -00f00093 -00b00113 -00000013 -00000013 -002081b3 -00120213 -00200293 -fe5212e3 -01a00e93 -01900e13 -1fd19a63 -00000213 -00d00093 -00000013 -00b00113 -002081b3 -00120213 -00200293 -fe5214e3 -01800e93 -01a00e13 -1dd19463 -00000213 -00e00093 -00000013 -00b00113 -00000013 -002081b3 -00120213 -00200293 -fe5212e3 -01900e93 -01b00e13 -19d19c63 -00000213 -00f00093 -00000013 -00000013 -00b00113 -002081b3 -00120213 -00200293 -fe5212e3 -01a00e93 -01c00e13 -17d19463 -00000213 -00b00113 -00d00093 -002081b3 -00120213 -00200293 -fe5216e3 -01800e93 -01d00e13 -15d19063 -00000213 -00b00113 -00e00093 -00000013 -002081b3 -00120213 -00200293 -fe5214e3 -01900e93 -01e00e13 -11d19a63 -00000213 -00b00113 -00f00093 -00000013 -00000013 -002081b3 -00120213 -00200293 -fe5212e3 -01a00e93 -01f00e13 -0fd19263 -00000213 -00b00113 -00000013 -00d00093 -002081b3 -00120213 -00200293 -fe5214e3 -01800e93 -02000e13 -0bd19c63 -00000213 -00b00113 -00000013 -00e00093 -00000013 -002081b3 -00120213 -00200293 -fe5212e3 -01900e93 -02100e13 -09d19463 -00000213 -00b00113 -00000013 -00000013 -00f00093 -002081b3 -00120213 -00200293 -fe5212e3 -01a00e93 -02200e13 -05d19c63 -00f00093 -00100133 -00f00e93 -02300e13 -05d11263 -02000093 -00008133 -02000e93 -02400e13 -03d11863 -000000b3 -00000e93 -02500e13 -03d09063 -01000093 -01e00113 -00208033 -00000e93 -02600e13 -01d01463 -03c01a63 -10000537 -04500593 -05200613 -04f00693 -00a00713 -00b52023 -00c52023 -00c52023 -00d52023 -00c52023 -00e52023 -00100073 -10000537 -04f00593 -04b00613 -00a00693 -00b52023 -00c52023 -00d52023 -991f806f -00008537 -c4050513 -10000637 -00050583 -00058a63 -00b62023 -00150513 -ff1ff06f -00006273 -02e00593 -00b62023 -00b62023 -00002097 -81808093 -faa00113 -00208023 -00008183 -faa00e93 -00200e13 -3dd19c63 -00001097 -7f808093 -00000113 -002080a3 -00108183 -00000e93 -00300e13 -3bd19c63 -00001097 -7d808093 -fffff137 -fa010113 -00208123 -00209183 -fffffeb7 -fa0e8e93 -00400e13 -39d19863 -00001097 -7b008093 -00a00113 -002081a3 -00308183 -00a00e93 -00500e13 -37d19863 -00001097 -79708093 -faa00113 -fe208ea3 -ffd08183 -faa00e93 -00600e13 -35d19863 -00001097 -77708093 -00000113 -fe208f23 -ffe08183 -00000e93 -00700e13 -33d19863 -00001097 -75708093 -fa000113 -fe208fa3 -fff08183 -fa000e93 -00800e13 -31d19863 -00001097 -73708093 -00a00113 -00208023 -00008183 -00a00e93 -00900e13 -2fd19863 -00001097 -71808093 -12345137 -67810113 -fe008213 -02220023 -00008183 -07800e93 -00a00e13 -2dd19463 -00001097 -6f008093 -00003137 -09810113 -ffa08093 -002083a3 -00001217 -6d920213 -00020183 -f9800e93 -00b00e13 -29d19c63 -00c00e13 -00000213 -fdd00093 -00001117 -6ac10113 -00110023 -00010183 -fdd00e93 -27d19a63 -00120213 -00200293 -fc521ee3 -00d00e13 -00000213 -fcd00093 -00001117 -67c10113 -00000013 -001100a3 -00110183 -fcd00e93 -25d19063 -00120213 -00200293 -fc521ce3 -00e00e13 -00000213 -fcc00093 -00001117 -64810113 -00000013 -00000013 -00110123 -00210183 -fcc00e93 -21d19463 -00120213 -00200293 -fc521ae3 -00f00e13 -00000213 -fbc00093 -00000013 -00001117 -60c10113 -001101a3 -00310183 -fbc00e93 -1dd19a63 -00120213 -00200293 -fc521ce3 -01000e13 -00000213 -fbb00093 -00000013 -00001117 -5d810113 -00000013 -00110223 -00410183 -fbb00e93 -19d19e63 -00120213 -00200293 -fc521ae3 -01100e13 -00000213 -fab00093 -00000013 -00000013 -00001117 -59c10113 -001102a3 -00510183 -fab00e93 -17d19263 -00120213 -00200293 -fc521ae3 -01200e13 -00000213 -00001117 -57010113 -03300093 -00110023 -00010183 -03300e93 -13d19a63 -00120213 -00200293 -fc521ee3 -01300e13 -00000213 -00001117 -54010113 -02300093 -00000013 -001100a3 -00110183 -02300e93 -11d19063 -00120213 -00200293 -fc521ce3 -01400e13 -00000213 -00001117 -50c10113 -02200093 -00000013 -00000013 -00110123 -00210183 -02200e93 -0dd19463 -00120213 -00200293 -fc521ae3 -01500e13 -00000213 -00001117 -4d410113 -00000013 -01200093 -001101a3 -00310183 -01200e93 -09d19a63 -00120213 -00200293 -fc521ce3 -01600e13 -00000213 -00001117 -4a010113 -00000013 -01100093 -00000013 -00110223 -00410183 -01100e93 -05d19e63 -00120213 -00200293 -fc521ae3 -01700e13 -00000213 -00001117 -46810113 -00000013 -00000013 -00100093 -001102a3 -00510183 -00100e93 -03d19263 -00120213 -00200293 -fc521ae3 -0ef00513 -00001597 -43458593 -00a581a3 -03c01a63 -10000537 -04500593 -05200613 -04f00693 -00a00713 -00b52023 -00c52023 -00c52023 -00d52023 -00c52023 -00e52023 -00100073 -10000537 -04f00593 -04b00613 -00a00693 -00b52023 -00c52023 -00d52023 -c98f806f -00008537 -0b450513 -10000637 -00050583 -00058a63 -00b62023 -00150513 -ff1ff06f -00006873 -02e00593 -00b62023 -00b62023 -00001097 -3b008093 -0aa00113 -00209023 -00009183 -0aa00e93 -00200e13 -45d19e63 -00001097 -39008093 -ffffb137 -a0010113 -00209123 -00209183 -ffffbeb7 -a00e8e93 -00300e13 -43d19a63 -00001097 -36808093 -beef1137 -aa010113 -00209223 -0040a183 -beef1eb7 -aa0e8e93 -00400e13 -41d19663 -00001097 -34008093 -ffffa137 -00a10113 -00209323 -00609183 -ffffaeb7 -00ae8e93 -00500e13 -3fd19263 -00001097 -32608093 -0aa00113 -fe209d23 -ffa09183 -0aa00e93 -00600e13 -3dd19263 -00001097 -30608093 -ffffb137 -a0010113 -fe209e23 -ffc09183 -ffffbeb7 -a00e8e93 -00700e13 -39d19e63 -00001097 -2de08093 -00001137 -aa010113 -fe209f23 -ffe09183 -00001eb7 -aa0e8e93 -00800e13 -37d19a63 -00001097 -2b608093 -ffffa137 -00a10113 -00209023 -00009183 -ffffaeb7 -00ae8e93 -00900e13 -35d19663 -00001097 -29008093 -12345137 -67810113 -fe008213 -02221023 -00009183 -00005eb7 -678e8e93 -00a00e13 -33d19063 -00001097 -26408093 -00003137 -09810113 -ffb08093 -002093a3 -00001217 -24e20213 -00021183 -00003eb7 -098e8e93 -00b00e13 -2fd19663 -00c00e13 -00000213 -ffffd0b7 -cdd08093 -00001117 -21010113 -00111023 -00011183 -ffffdeb7 -cdde8e93 -2dd19063 -00120213 -00200293 -fc521ae3 -00d00e13 -00000213 -ffffc0b7 -ccd08093 -00001117 -1d810113 -00000013 -00111123 -00211183 -ffffceb7 -ccde8e93 -29d19263 -00120213 -00200293 -fc5218e3 -00e00e13 -00000213 -ffffc0b7 -bcc08093 -00001117 -19c10113 -00000013 -00000013 -00111223 -00411183 -ffffceb7 -bcce8e93 -25d19263 -00120213 -00200293 -fc5216e3 -00f00e13 -00000213 -ffffb0b7 -bbc08093 -00000013 -00001117 -15810113 -00111323 -00611183 -ffffbeb7 -bbce8e93 -21d19463 -00120213 -00200293 -fc5218e3 -01000e13 -00000213 -ffffb0b7 -abb08093 -00000013 -00001117 -11c10113 -00000013 -00111423 -00811183 -ffffbeb7 -abbe8e93 -1dd19463 -00120213 -00200293 -fc5216e3 -01100e13 -00000213 -ffffe0b7 -aab08093 -00000013 -00000013 -00001117 -0d810113 -00111523 -00a11183 -ffffeeb7 -aabe8e93 -19d19463 -00120213 -00200293 -fc5216e3 -01200e13 -00000213 -00001117 -0a810113 -000020b7 -23308093 -00111023 -00011183 -00002eb7 -233e8e93 -15d19863 -00120213 -00200293 -fc521ae3 -01300e13 -00000213 -00001117 -07010113 -000010b7 -22308093 -00000013 -00111123 -00211183 -00001eb7 -223e8e93 -11d19a63 -00120213 -00200293 -fc5218e3 -01400e13 -00000213 -00001117 -03410113 -000010b7 -12208093 -00000013 -00000013 -00111223 -00411183 -00001eb7 -122e8e93 -0dd19a63 -00120213 -00200293 -fc5216e3 -01500e13 -00000213 -00001117 -ff410113 -00000013 -11200093 -00111323 -00611183 -11200e93 -0bd19063 -00120213 -00200293 -fc521ce3 -01600e13 -00000213 -00001117 -fc010113 -00000013 -01100093 -00000013 -00111423 -00811183 -01100e93 -07d19463 -00120213 -00200293 -fc521ae3 -01700e13 -00000213 -00001117 -f8810113 -00000013 -00000013 -000030b7 -00108093 -00111523 -00a11183 -00003eb7 -001e8e93 -03d19463 -00120213 -00200293 -fc5216e3 -0000c537 -eef50513 -00001597 -f4858593 -00a59323 -03c01a63 -10000537 -04500593 -05200613 -04f00693 -00a00713 -00b52023 -00c52023 -00c52023 -00d52023 -00c52023 -00e52023 -00100073 -10000537 -04f00593 -04b00613 -00a00693 -00b52023 -00c52023 -00d52023 -fadf706f -00008537 -5ac50513 -10000637 -00050583 -00058a63 -00b62023 -00150513 -ff1ff06f -0000006a -02e00593 -00b62023 -00b62023 -00200e13 -0080006f -0340006f -00100093 -0140006f -00108093 -00108093 -00108093 -00108093 -00108093 -00108093 -00300e93 -00300e13 -01d09463 -03c01a63 -10000537 -04500593 -05200613 -04f00693 -00a00713 -00b52023 -00c52023 -00c52023 -00d52023 -00c52023 -00e52023 -00100073 -10000537 -04f00593 -04b00613 -00a00693 -00b52023 -00c52023 -00d52023 -e3df706f -00008537 -66850513 -10000637 -00050583 -00058a63 -00b62023 -00150513 -ff1ff06f -00656e62 -02e00593 -00b62023 -00b62023 -00200e13 -00000093 -00100113 -00209663 -2bc01a63 -01c01663 -fe209ee3 -2bc01463 -00300e13 -00100093 -00000113 -00209663 -29c01a63 -01c01663 -fe209ee3 -29c01463 -00400e13 -fff00093 -00100113 -00209663 -27c01a63 -01c01663 -fe209ee3 -27c01463 -00500e13 -00100093 -fff00113 -00209663 -25c01a63 -01c01663 -fe209ee3 -25c01463 -00600e13 -00000093 -00000113 -00209463 -01c01463 -23c01863 -fe209ee3 -00700e13 -00100093 -00100113 -00209463 -01c01463 -21c01a63 -fe209ee3 -00800e13 -fff00093 -fff00113 -00209463 -01c01463 -1fc01c63 -fe209ee3 -00900e13 -00000213 -00000093 -00000113 -1e209063 -00120213 -00200293 -fe5216e3 -00a00e13 -00000213 -00000093 -00000113 -00000013 -1a209e63 -00120213 -00200293 -fe5214e3 -00b00e13 -00000213 -00000093 -00000113 -00000013 -00000013 -18209a63 -00120213 -00200293 -fe5212e3 -00c00e13 -00000213 -00000093 -00000013 -00000113 -16209863 -00120213 -00200293 -fe5214e3 -00d00e13 -00000213 -00000093 -00000013 -00000113 -00000013 -14209463 -00120213 -00200293 -fe5212e3 -00e00e13 -00000213 -00000093 -00000013 -00000013 -00000113 -12209063 -00120213 -00200293 -fe5212e3 -00f00e13 -00000213 -00000093 -00000113 -10209063 -00120213 -00200293 -fe5216e3 -01000e13 -00000213 -00000093 -00000113 -00000013 -0c209e63 -00120213 -00200293 -fe5214e3 -01100e13 -00000213 -00000093 -00000113 -00000013 -00000013 -0a209a63 -00120213 -00200293 -fe5212e3 -01200e13 -00000213 -00000093 -00000013 -00000113 -08209863 -00120213 -00200293 -fe5214e3 -01300e13 -00000213 -00000093 -00000013 -00000113 -00000013 -06209463 -00120213 -00200293 -fe5212e3 -01400e13 -00000213 -00000093 -00000013 -00000013 -00000113 -04209063 -00120213 -00200293 -fe5212e3 -00100093 -00009a63 -00108093 -00108093 -00108093 -00108093 -00108093 -00108093 -00300e93 -01500e13 -01d09463 -03c01a63 -10000537 -04500593 -05200613 -04f00693 -00a00713 -00b52023 -00c52023 -00c52023 -00d52023 -00c52023 -00e52023 -00100073 -10000537 -04f00593 -04b00613 -00a00693 -00b52023 -00c52023 -00d52023 -b29f706f -00009537 -9ac50513 -10000637 -00050583 -00058a63 -00b62023 -00150513 -ff1ff06f -00656762 -02e00593 -00b62023 -00b62023 -00200e13 -00000093 -00000113 -0020d663 -31c01863 -01c01663 -fe20dee3 -31c01263 -00300e13 -00100093 -00100113 -0020d663 -2fc01863 -01c01663 -fe20dee3 -2fc01263 -00400e13 -fff00093 -fff00113 -0020d663 -2dc01863 -01c01663 -fe20dee3 -2dc01263 -00500e13 -00100093 -00000113 -0020d663 -2bc01863 -01c01663 -fe20dee3 -2bc01263 -00600e13 -00100093 -fff00113 -0020d663 -29c01863 -01c01663 -fe20dee3 -29c01263 -00700e13 -fff00093 -ffe00113 -0020d663 -27c01863 -01c01663 -fe20dee3 -27c01263 -00800e13 -00000093 -00100113 -0020d463 -01c01463 -25c01663 -fe20dee3 -00900e13 -fff00093 -00100113 -0020d463 -01c01463 -23c01863 -fe20dee3 -00a00e13 -ffe00093 -fff00113 -0020d463 -01c01463 -21c01a63 -fe20dee3 -00b00e13 -ffe00093 -00100113 -0020d463 -01c01463 -1fc01c63 -fe20dee3 -00c00e13 -00000213 -fff00093 -00000113 -1e20d063 -00120213 -00200293 -fe5216e3 -00d00e13 -00000213 -fff00093 -00000113 -00000013 -1a20de63 -00120213 -00200293 -fe5214e3 -00e00e13 -00000213 -fff00093 -00000113 -00000013 -00000013 -1820da63 -00120213 -00200293 -fe5212e3 -00f00e13 -00000213 -fff00093 -00000013 -00000113 -1620d863 -00120213 -00200293 -fe5214e3 -01000e13 -00000213 -fff00093 -00000013 -00000113 -00000013 -1420d463 -00120213 -00200293 -fe5212e3 -01100e13 -00000213 -fff00093 -00000013 -00000013 -00000113 -1220d063 -00120213 -00200293 -fe5212e3 -01200e13 -00000213 -fff00093 -00000113 -1020d063 -00120213 -00200293 -fe5216e3 -01300e13 -00000213 -fff00093 -00000113 -00000013 -0c20de63 -00120213 -00200293 -fe5214e3 -01400e13 -00000213 -fff00093 -00000113 -00000013 -00000013 -0a20da63 -00120213 -00200293 -fe5212e3 -01500e13 -00000213 -fff00093 -00000013 -00000113 -0820d863 -00120213 -00200293 -fe5214e3 -01600e13 -00000213 -fff00093 -00000013 -00000113 -00000013 -0620d463 -00120213 -00200293 -fe5212e3 -01700e13 -00000213 -fff00093 -00000013 -00000013 -00000113 -0420d063 -00120213 -00200293 -fe5212e3 -00100093 -0000da63 -00108093 -00108093 -00108093 -00108093 -00108093 -00108093 -00300e93 -01800e13 -01d09463 -03c01a63 -10000537 -04500593 -05200613 -04f00693 -00a00713 -00b52023 -00c52023 -00c52023 -00d52023 -00c52023 -00e52023 -00100073 -10000537 -04f00593 -04b00613 -00a00693 -00b52023 -00c52023 -00d52023 -fa0f706f -00009537 -d4c50513 -10000637 -00050583 -00058a63 -00b62023 -00150513 -ff1ff06f -00746c62 -02e00593 -00b62023 -00b62023 -00200e13 -00000093 -00100113 -0020c663 -2bc01863 -01c01663 -fe20cee3 -2bc01263 -00300e13 -fff00093 -00100113 -0020c663 -29c01863 -01c01663 -fe20cee3 -29c01263 -00400e13 -ffe00093 -fff00113 -0020c663 -27c01863 -01c01663 -fe20cee3 -27c01263 -00500e13 -00100093 -00000113 -0020c463 -01c01463 -25c01663 -fe20cee3 -00600e13 -00100093 -fff00113 -0020c463 -01c01463 -23c01863 -fe20cee3 -00700e13 -fff00093 -ffe00113 -0020c463 -01c01463 -21c01a63 -fe20cee3 -00800e13 -00100093 -ffe00113 -0020c463 -01c01463 -1fc01c63 -fe20cee3 -00900e13 -00000213 -00000093 -fff00113 -1e20c063 -00120213 -00200293 -fe5216e3 -00a00e13 -00000213 -00000093 -fff00113 -00000013 -1a20ce63 -00120213 -00200293 -fe5214e3 -00b00e13 -00000213 -00000093 -fff00113 -00000013 -00000013 -1820ca63 -00120213 -00200293 -fe5212e3 -00c00e13 -00000213 -00000093 -00000013 -fff00113 -1620c863 -00120213 -00200293 -fe5214e3 -00d00e13 -00000213 -00000093 -00000013 -fff00113 -00000013 -1420c463 -00120213 -00200293 -fe5212e3 -00e00e13 -00000213 -00000093 -00000013 -00000013 -fff00113 -1220c063 -00120213 -00200293 -fe5212e3 -00f00e13 -00000213 -00000093 -fff00113 -1020c063 -00120213 -00200293 -fe5216e3 -01000e13 -00000213 -00000093 -fff00113 -00000013 -0c20ce63 -00120213 -00200293 -fe5214e3 -01100e13 -00000213 -00000093 -fff00113 -00000013 -00000013 -0a20ca63 -00120213 -00200293 -fe5212e3 -01200e13 -00000213 -00000093 -00000013 -fff00113 -0820c863 -00120213 -00200293 -fe5214e3 -01300e13 -00000213 -00000093 -00000013 -fff00113 -00000013 -0620c463 -00120213 -00200293 -fe5212e3 -01400e13 -00000213 -00000093 -00000013 -00000013 -fff00113 -0420c063 -00120213 -00200293 -fe5212e3 -00100093 -00104a63 -00108093 -00108093 -00108093 -00108093 -00108093 -00108093 -00300e93 -01500e13 -01d09463 -03c01a63 -10000537 -04500593 -05200613 -04f00693 -00a00713 -00b52023 -00c52023 -00c52023 -00d52023 -00c52023 -00e52023 -00100073 -10000537 -04f00593 -04b00613 -00a00693 -00b52023 -00c52023 -00d52023 -c54f706f -00050613 -00000513 -0015f693 -00068463 -00c50533 -0015d593 -00161613 -fe0596e3 -00008067 -00008293 -00050f13 -00058513 -00068f93 -000f0593 -00060713 -00000793 -00000393 -00000e93 -00b38833 -00177e13 -00179893 -0005a313 -00175713 -00fe87b3 -000e0863 -00783e33 -00080393 -00fe0eb3 -00159593 -011367b3 -fc0718e3 -00050863 -00060593 -f7dff0ef -00ae8eb3 -000f8a63 -000f8593 -000f0513 -f69ff0ef -00ae8eb3 -00038513 -000e8593 -00028067 -06054063 -0605c663 -00058613 -00050593 -fff00513 -02060c63 -00100693 -00b67a63 -00c05863 -00161613 -00169693 -feb66ae3 -00000513 -00c5e663 -40c585b3 -00d56533 -0016d693 -00165613 -fe0696e3 -00008067 -00008293 -fb5ff0ef -00058513 -00028067 -40a00533 -0005d863 -40b005b3 -f9dff06f -40b005b3 -00008293 -f91ff0ef -40a00533 -00028067 -00008293 -0005ca63 -00054c63 -f79ff0ef -00058513 -00028067 -40b005b3 -fe0558e3 -40a00533 -f61ff0ef -40b00533 -00028067 -20202020 -00000000 -6d73694d -68637461 -74656220 -6e656577 -20307120 -2042534c -20646e61 -6f636564 -20646564 -74736e69 -74637572 -206e6f69 -64726f77 -30712021 -0078303d -6e69202c -3d727473 -00007830 -2d2d2d2d -2d2d2d2d -2d2d2d2d -2d2d2d2d -2d2d2d2d -2d2d2d2d -2d2d2d2d -2d2d2d2d -2d2d2d2d -2d2d2d2d -2d2d2d2d -2d2d2d2d -2d2d2d2d -2d2d2d2d -2d2d2d2d -0000000a -45524245 -69204b41 -7274736e -69746375 -61206e6f -78302074 -00000000 -656c6c49 -206c6167 -74736e49 -74637572 -206e6f69 -30207461 -00000078 -7830203a -00000000 -20737542 -6f727265 -6e692072 -736e4920 -63757274 -6e6f6974 -20746120 -00007830 -20206370 -00000000 -626d754e -6f207265 -61662066 -65207473 -72657478 -206c616e -73515249 -756f6320 -6465746e -0000203a -626d754e -6f207265 -6c732066 -6520776f -72657478 -206c616e -73515249 -756f6320 -6465746e -0000203a -626d754e -6f207265 -69742066 -2072656d -73515249 -756f6320 -6465746e -0000203a -00000000 -00000000 -00000000 -3a434347 -4e472820 -37202955 -302e322e -00000000 -33323130 -37363534 -42413938 -46454443 -00000000 -00000020 -00007473 -0000646e -00006472 -00006874 -69727020 -6920656d -00002073 -00000a2e -63656863 -6d75736b -0000203a -0a4b4f20 -00000000 -52524520 -000a524f -00000000 -00000000 -00000000 -75706e69 -005b2074 -0000205d -00005b20 -64726168 -00202020 -74666f73 -00202020 -00002020 -12b9b0a1 -6c637943 -6f632065 -65746e75 -2e2e2072 -2e2e2e2e -00002e2e -736e490a -63757274 -6e6f6974 -756f6320 -7265746e -002e2e20 -4950430a -0000203a -0000002e -0ff000ff -ff0000ff -f00f0ff0 -deadbeef -deadbeef -deadbeef -deadbeef -deadbeef -deadbeef -deadbeef -deadbeef -deadbeef -deadbeef -00ff00ff -ff00ff00 -0ff00ff0 -f00ff00f -0ff000ff -ff0000ff -f00f0ff0 -efefefef -efefefef -0000efef -beefbeef -beefbeef -beefbeef -beefbeef -beefbeef -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 diff --git a/picorv32_firmware/firmware/irq.c b/picorv32_firmware/firmware/irq.c deleted file mode 100644 index 9fc1735..0000000 --- a/picorv32_firmware/firmware/irq.c +++ /dev/null @@ -1,140 +0,0 @@ -// This is free and unencumbered software released into the public domain. -// -// Anyone is free to copy, modify, publish, use, compile, sell, or -// distribute this software, either in source code form or as a compiled -// binary, for any purpose, commercial or non-commercial, and by any -// means. - -#include "firmware.h" - -uint32_t *irq(uint32_t *regs, uint32_t irqs) -{ - static unsigned int ext_irq_4_count = 0; - static unsigned int ext_irq_5_count = 0; - static unsigned int timer_irq_count = 0; - - // checking compressed isa q0 reg handling - if ((irqs & 6) != 0) { - uint32_t pc = (regs[0] & 1) ? regs[0] - 3 : regs[0] - 4; - uint32_t instr = *(uint16_t*)pc; - - if ((instr & 3) == 3) - instr = instr | (*(uint16_t*)(pc + 2)) << 16; - - if (((instr & 3) != 3) != (regs[0] & 1)) { - print_str("Mismatch between q0 LSB and decoded instruction word! q0=0x"); - print_hex(regs[0], 8); - print_str(", instr=0x"); - if ((instr & 3) == 3) - print_hex(instr, 8); - else - print_hex(instr, 4); - print_str("\n"); - __asm__ volatile ("ebreak"); - } - } - - if ((irqs & (1<<4)) != 0) { - ext_irq_4_count++; - // print_str("[EXT-IRQ-4]"); - } - - if ((irqs & (1<<5)) != 0) { - ext_irq_5_count++; - // print_str("[EXT-IRQ-5]"); - } - - if ((irqs & 1) != 0) { - timer_irq_count++; - // print_str("[TIMER-IRQ]"); - } - - if ((irqs & 6) != 0) - { - uint32_t pc = (regs[0] & 1) ? regs[0] - 3 : regs[0] - 4; - uint32_t instr = *(uint16_t*)pc; - - if ((instr & 3) == 3) - instr = instr | (*(uint16_t*)(pc + 2)) << 16; - - print_str("\n"); - print_str("------------------------------------------------------------\n"); - - if ((irqs & 2) != 0) { - if (instr == 0x00100073 || instr == 0x9002) { - print_str("EBREAK instruction at 0x"); - print_hex(pc, 8); - print_str("\n"); - } else { - print_str("Illegal Instruction at 0x"); - print_hex(pc, 8); - print_str(": 0x"); - print_hex(instr, ((instr & 3) == 3) ? 8 : 4); - print_str("\n"); - } - } - - if ((irqs & 4) != 0) { - print_str("Bus error in Instruction at 0x"); - print_hex(pc, 8); - print_str(": 0x"); - print_hex(instr, ((instr & 3) == 3) ? 8 : 4); - print_str("\n"); - } - - for (int i = 0; i < 8; i++) - for (int k = 0; k < 4; k++) - { - int r = i + k*8; - - if (r == 0) { - print_str("pc "); - } else - if (r < 10) { - print_chr('x'); - print_chr('0' + r); - print_chr(' '); - print_chr(' '); - } else - if (r < 20) { - print_chr('x'); - print_chr('1'); - print_chr('0' + r - 10); - print_chr(' '); - } else - if (r < 30) { - print_chr('x'); - print_chr('2'); - print_chr('0' + r - 20); - print_chr(' '); - } else { - print_chr('x'); - print_chr('3'); - print_chr('0' + r - 30); - print_chr(' '); - } - - print_hex(regs[r], 8); - print_str(k == 3 ? "\n" : " "); - } - - print_str("------------------------------------------------------------\n"); - - print_str("Number of fast external IRQs counted: "); - print_dec(ext_irq_4_count); - print_str("\n"); - - print_str("Number of slow external IRQs counted: "); - print_dec(ext_irq_5_count); - print_str("\n"); - - print_str("Number of timer IRQs counted: "); - print_dec(timer_irq_count); - print_str("\n"); - - __asm__ volatile ("ebreak"); - } - - return regs; -} - diff --git a/picorv32_firmware/firmware/irq.o b/picorv32_firmware/firmware/irq.o deleted file mode 100644 index 6301da087f5bc623759c8d013d5e5c49441fad39..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5892 zcmcJSe`u8V9mhXUo;%OPxJECn@h+>6UTUJoYc58k(n0*yDoeZ8Ir>k*#mm`*CON&F znhjyGr|9fpmJ=$&F$Wb&5$dpz4P;a%tbaI=At*yON5u;3A1OPqcaRcbSevx}P>Z9pSD;=17giJ?}wk$-9wM zusE7ZXZ+OCd687pp-8HAgP&UdnxAUvf!piD`N;EA!7u$(`d40gA}8_csFZ&kmF(M* z8owF5e}R-^zkirLJPZ5l5B+N~iO1R`zQ04V4R@q;y;;id#k^I$6B7Sn2Xg-O@IvP} zj=w&uGb$2~M&&(>?ekF)|G8=@M@K91%>FX!vOgQSk9`-8jr`l(VX2eyWVM$)9+S?P zNU1p{<)aHE6-?4sJ=rgmCwa_uNvXM7;*$#`ejIa+V2;PHKP>I2!F({+NzQdrO0O>u z=X&AxgmgwYx9RbX)gV4nQyFi0a+zcg$0B1fjPqz`EPHH1#;_3Oqs@~2*~GJt%^mZO zN2iZ>YnT7AO|qlakF6)y%01?>nix0F71uI*^7C+Q<42~)?0(1C9E=}xDA%5l_}n&c zY%chnIZ|GTImaSWj?~D7>UCb6d9_!))Y2~{dphz={K(wOoc*(pp5Jioj?9s4{R5o) zOO?F%oFr;?N%`<$Tx-=;pEW+XAFoNkjml>Y_wTvuICD;8IM@E!*mN!D9Q?m>d99U# zOA#OUP&`^KrKSxLf0-94ExY9V%Mbab~H&pp6y{gj6OCIjU z=$p9qXO8W^J$L!>MSqS*M`PJ5r>pe7!a4Qh`@VXr5=Uja&tV*UC%f_IPG6m0Ip#=j z6>H?je=(Kqa%x8dC+D)4AOFigE5}6JoW3UXEt_h!#Pu+15VcCNQM8}|(dxk4ddK#3@m;+O%nX(DKqN z-&+=RrrXnPoY0KsIdMe3eCUMYKk`e0`wD+<^Ccp<-DEaCc-$d-mLx4}{5)bdjZI{> zzTgMIX+DnMgt)fiqOujtk7-ePSuxy4WjppeDlRIogHJl~8{lhB+ylPi#Jj;9n`u#b z3oxM}#PDyPYl4-s#5`aeS4>%<=;zUsukLHxcG{}%B{r{3=n zcT`~$HZL4&qZ9uD{+5&fN5rR`{_BYQocJc z=lHJ>cRBs{5l5Vu7x?#`ID*=1ofzGf=Hu$Fw%>gaIrDKM=2pfccfSkUfR|q2f+F;4Ss#Ml9j+Zz-{ybRglht3LxAn>D`3y?b zVuMCje*>Jfo~)kth1Msl9|tGwW0S0Y0-Us-tbPjIXgyi|Y+RR#SrBMs^|j!n^H~0sKLTiE^?XJqttYE*1vgqxR^JQO^&zY81MB*b)enGmeaPyI-~`@H*~scg zz)9=L>JNgo4q5&C;KVmf9kTilz)9=L>d%3-4p}{)U3xu`)n5kdyvXW5WqybGUb6Zd z;KWnLlhxk@C#@%|zXjGhWcB0p_WC5NzXwj#nfhe)Q{bfaWc7k)uGS~359n=uvicUV z&X=sdmHBqQWcB=wNz60jA*`pu3ftAEw; zWc7S^)bWtj4>+Ezelw<8x4_JI2f4v;A97i9iJg%-iHx31A}Bl(+# z`R-r$tl=*5BEvh#f#GB1#fDFkml!@nP8q&NZZcet`?T&k!+qqXhEI^24WB2s7`{ke zX80=3UEOlSH^K8(7`{#4YPbRGGjF9~zRTC84ZlGDyx}hTHp6ewXAF-xEa~AN3>JHK zVP7nmeV> 17; - x ^= x << 5; - return x; -} - -void multest(void) -{ - for (int i = 0; i < 10; i++) - { - uint32_t a = xorshift32(); - uint32_t b = xorshift32(); - - uint64_t au = a, bu = b; - int64_t as = (int32_t)a, bs = (int32_t)b; - - print_str("input ["); - print_hex(as >> 32, 8); - print_str("] "); - print_hex(a, 8); - print_str(" ["); - print_hex(bs >> 32, 8); - print_str("] "); - print_hex(b, 8); - print_chr('\n'); - - //uint32_t h_mul, h_mulh, h_mulhsu, h_mulhu; - print_str("hard "); - - //h_mul = hard_mul(a, b); - //print_hex(h_mul, 8); - //print_str(" "); - - //h_mulh = hard_mulh(a, b); - //print_hex(h_mulh, 8); - //print_str(" "); - - //h_mulhsu = hard_mulhsu(a, b); - //print_hex(h_mulhsu, 8); - //print_str(" "); - - // h_mulhu = hard_mulhu(a, b); - //print_hex(h_mulhu, 8); - //print_chr('\n'); - - uint32_t s_mul, s_mulh, s_mulhsu, s_mulhu; - print_str("soft "); - - s_mul = a * b; - print_hex(s_mul, 8); - print_str(" "); - - s_mulh = (as * bs) >> 32; - print_hex(s_mulh, 8); - print_str(" "); - - s_mulhsu = (as * bu) >> 32; - print_hex(s_mulhsu, 8); - print_str(" "); - - s_mulhu = (au * bu) >> 32; - print_hex(s_mulhu, 8); - print_str(" "); - - /*if (s_mul != h_mul || s_mulh != h_mulh || s_mulhsu != h_mulhsu || s_mulhu != h_mulhu) { - print_str("ERROR!\n"); - __asm__ volatile ("ebreak"); - return; - }*/ - - print_str(" OK\n"); - } -} - diff --git a/picorv32_firmware/firmware/print.c b/picorv32_firmware/firmware/print.c deleted file mode 100644 index accce26..0000000 --- a/picorv32_firmware/firmware/print.c +++ /dev/null @@ -1,41 +0,0 @@ -// This is free and unencumbered software released into the public domain. -// -// Anyone is free to copy, modify, publish, use, compile, sell, or -// distribute this software, either in source code form or as a compiled -// binary, for any purpose, commercial or non-commercial, and by any -// means. - -#include "firmware.h" - -#define OUTPORT 0x10000000 - -void print_chr(char ch) -{ - *((volatile uint32_t*)OUTPORT) = ch; -} - -void print_str(const char *p) -{ - while (*p != 0) - *((volatile uint32_t*)OUTPORT) = *(p++); -} - -void print_dec(unsigned int val) -{ - char buffer[10]; - char *p = buffer; - while (val || p == buffer) { - *(p++) = val % 10; - val = val / 10; - } - while (p != buffer) { - *((volatile uint32_t*)OUTPORT) = '0' + *(--p); - } -} - -void print_hex(unsigned int val, int digits) -{ - for (int i = (4*digits)-4; i >= 0; i -= 4) - *((volatile uint32_t*)OUTPORT) = "0123456789ABCDEF"[(val >> i) % 16]; -} - diff --git a/picorv32_firmware/firmware/print.o b/picorv32_firmware/firmware/print.o deleted file mode 100644 index 60ef4316ab0bdd93780ed3f14de7891c54e983c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1428 zcma)5J#5oZ5I)y-L(5N-x**h65O9DL6)S%K6=peu(dhP`=E~B_TrB=_8|N20n!2iTIr;q`CfJE zUB2*)?6oyoURtHb+W^^%Z`ykEC+6*K#o~!%>gY&%^w`*m?8)&7qFgq6JRHrPIX@Im z8wn$Z0ybeo@91mWKP+$PERl@I51B->MNlRc-S$JJ9gu_TA&GjygFd|reBP(~!O!{h z9`I8>y&wFYPagt*?bGWNM5ay}7J+T>z4)FHc;;La>kPaHuIscX;8}AmQP@ow=U;?> z0vi>YuGD5`EyE;ZDjUNq1xv!xuu<3uEY5*=!cEPa<(go1t48_!)k?KkpGh(+&Rk>W zESWEsOu@>fId}gMHU+qrq{E1s@V(qrpb7KhPr>^;@dB88@fY9&BF@~4_kjm-=NJ)K zXp2Lg-Ur2@P9fy+BJ*xH=P_JptIPQ;g4|%>6D+jdp+rXgdc`VC!&^1impxW1T`m|_ zY0e^}Sg;CYOxNpV)T%5vJ#L_@X0=i&&01o$|8iku@%FdZKcoxRB^uTyMzSDf1UTvUs3zN!B1b8h5*W%B64l(JBxGyj74{yw#z5oCK diff --git a/picorv32_firmware/firmware/riscv.ld b/picorv32_firmware/firmware/riscv.ld deleted file mode 100644 index bf339fb..0000000 --- a/picorv32_firmware/firmware/riscv.ld +++ /dev/null @@ -1,200 +0,0 @@ -/* ---- Original Script: /opt/riscv32i/riscv32-unknown-elf/lib/ldscripts/elf32lriscv.x ---- */ -/* Default linker script, for normal executables */ -/* Copyright (C) 2014-2017 Free Software Foundation, Inc. - Copying and distribution of this script, with or without modification, - are permitted in any medium without royalty provided the copyright - notice and this notice are preserved. */ -OUTPUT_FORMAT("elf32-littleriscv", "elf32-littleriscv", - "elf32-littleriscv") -OUTPUT_ARCH(riscv) -ENTRY(_start) -SECTIONS -{ - . = 0x00010000; - .text : - { - *(.text) - *(.text.unlikely .text.*_unlikely .text.unlikely.*) - *(.text.exit .text.exit.*) - *(.text.startup .text.startup.*) - *(.text.hot .text.hot.*) - *(.stub .text.* .gnu.linkonce.t.*) - /* .gnu.warning sections are handled specially by elf32.em. */ - *(.gnu.warning) - } - .init : - { - KEEP (*(SORT_NONE(.init))) - } - .plt : { *(.plt) } - .iplt : { *(.iplt) } - .fini : - { - KEEP (*(SORT_NONE(.fini))) - } - PROVIDE (__etext = .); - PROVIDE (_etext = .); - PROVIDE (etext = .); - .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } - .rodata1 : { *(.rodata1) } - .sdata2 : - { - *(.sdata2 .sdata2.* .gnu.linkonce.s2.*) - } - .sbss2 : { *(.sbss2 .sbss2.* .gnu.linkonce.sb2.*) } - .eh_frame_hdr : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) } - .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) } - .gcc_except_table : ONLY_IF_RO { *(.gcc_except_table - .gcc_except_table.*) } - .gnu_extab : ONLY_IF_RO { *(.gnu_extab*) } - /* These sections are generated by the Sun/Oracle C++ compiler. */ - .exception_ranges : ONLY_IF_RO { *(.exception_ranges - .exception_ranges*) } - /* Adjust the address for the data segment. We want to adjust up to - the same address within the page on the next page up. */ - . = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE)); - /* Exception handling */ - .eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) } - .gnu_extab : ONLY_IF_RW { *(.gnu_extab) } - .gcc_except_table : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) } - .exception_ranges : ONLY_IF_RW { *(.exception_ranges .exception_ranges*) } - /* Thread Local Storage sections */ - .tdata : { *(.tdata .tdata.* .gnu.linkonce.td.*) } - .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } - .preinit_array : - { - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP (*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - } - .init_array : - { - PROVIDE_HIDDEN (__init_array_start = .); - KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) - KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) - PROVIDE_HIDDEN (__init_array_end = .); - } - .fini_array : - { - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) - KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) - PROVIDE_HIDDEN (__fini_array_end = .); - } - .ctors : - { - /* gcc uses crtbegin.o to find the start of - the constructors, so we make sure it is - first. Because this is a wildcard, it - doesn't matter if the user does not - actually link against crtbegin.o; the - linker won't look for a file to match a - wildcard. The wildcard also means that it - doesn't matter which directory crtbegin.o - is in. */ - KEEP (*crtbegin.o(.ctors)) - KEEP (*crtbegin?.o(.ctors)) - /* We don't want to include the .ctor section from - the crtend.o file until after the sorted ctors. - The .ctor section from the crtend file contains the - end of ctors marker and it must be last */ - KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) - KEEP (*(SORT(.ctors.*))) - KEEP (*(.ctors)) - } - .dtors : - { - KEEP (*crtbegin.o(.dtors)) - KEEP (*crtbegin?.o(.dtors)) - KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) - KEEP (*(SORT(.dtors.*))) - KEEP (*(.dtors)) - } - .jcr : { KEEP (*(.jcr)) } - .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) } - .dynamic : { *(.dynamic) } - . = DATA_SEGMENT_RELRO_END (0, .); - .data : - { - *(.data .data.* .gnu.linkonce.d.*) - SORT(CONSTRUCTORS) - } - .data1 : { *(.data1) } - .got : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) } - /* We want the small data sections together, so single-instruction offsets - can access them all, and initialized data all before uninitialized, so - we can shorten the on-disk segment size. */ - .sdata : - { - __global_pointer$ = . + 0x800; - *(.srodata.cst16) *(.srodata.cst8) *(.srodata.cst4) *(.srodata.cst2) *(.srodata .srodata.*) - *(.sdata .sdata.* .gnu.linkonce.s.*) - } - _edata = .; PROVIDE (edata = .); - . = .; - __bss_start = .; - .sbss : - { - *(.dynsbss) - *(.sbss .sbss.* .gnu.linkonce.sb.*) - *(.scommon) - } - .bss : - { - *(.dynbss) - *(.bss .bss.* .gnu.linkonce.b.*) - *(COMMON) - /* Align here to ensure that the .bss section occupies space up to - _end. Align after .bss to ensure correct alignment even if the - .bss section disappears because there are no input sections. - FIXME: Why do we need it? When there is no .bss section, we don't - pad the .data section. */ - . = ALIGN(. != 0 ? 32 / 8 : 1); - } - . = ALIGN(32 / 8); - . = SEGMENT_START("ldata-segment", .); - . = ALIGN(32 / 8); - _end = .; PROVIDE (end = .); - . = DATA_SEGMENT_END (.); - /* Stabs debugging sections. */ - .stab 0 : { *(.stab) } - .stabstr 0 : { *(.stabstr) } - .stab.excl 0 : { *(.stab.excl) } - .stab.exclstr 0 : { *(.stab.exclstr) } - .stab.index 0 : { *(.stab.index) } - .stab.indexstr 0 : { *(.stab.indexstr) } - .comment 0 : { *(.comment) } - /* DWARF debug sections. - Symbols in the DWARF debugging sections are relative to the beginning - of the section so we begin them at 0. */ - /* DWARF 1 */ - .debug 0 : { *(.debug) } - .line 0 : { *(.line) } - /* GNU DWARF 1 extensions */ - .debug_srcinfo 0 : { *(.debug_srcinfo) } - .debug_sfnames 0 : { *(.debug_sfnames) } - /* DWARF 1.1 and DWARF 2 */ - .debug_aranges 0 : { *(.debug_aranges) } - .debug_pubnames 0 : { *(.debug_pubnames) } - /* DWARF 2 */ - .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } - .debug_abbrev 0 : { *(.debug_abbrev) } - .debug_line 0 : { *(.debug_line .debug_line.* .debug_line_end ) } - .debug_frame 0 : { *(.debug_frame) } - .debug_str 0 : { *(.debug_str) } - .debug_loc 0 : { *(.debug_loc) } - .debug_macinfo 0 : { *(.debug_macinfo) } - /* SGI/MIPS DWARF 2 extensions */ - .debug_weaknames 0 : { *(.debug_weaknames) } - .debug_funcnames 0 : { *(.debug_funcnames) } - .debug_typenames 0 : { *(.debug_typenames) } - .debug_varnames 0 : { *(.debug_varnames) } - /* DWARF 3 */ - .debug_pubtypes 0 : { *(.debug_pubtypes) } - .debug_ranges 0 : { *(.debug_ranges) } - /* DWARF Extension. */ - .debug_macro 0 : { *(.debug_macro) } - .debug_addr 0 : { *(.debug_addr) } - .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) } - /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) } -} diff --git a/picorv32_firmware/firmware/riscv.ld.orig b/picorv32_firmware/firmware/riscv.ld.orig deleted file mode 100644 index 6d40e3d..0000000 --- a/picorv32_firmware/firmware/riscv.ld.orig +++ /dev/null @@ -1,236 +0,0 @@ -/* ---- Original Script: /opt/riscv32i/riscv32-unknown-elf/lib/ldscripts/elf32lriscv.x ---- */ -/* Default linker script, for normal executables */ -/* Copyright (C) 2014-2017 Free Software Foundation, Inc. - Copying and distribution of this script, with or without modification, - are permitted in any medium without royalty provided the copyright - notice and this notice are preserved. */ -OUTPUT_FORMAT("elf32-littleriscv", "elf32-littleriscv", - "elf32-littleriscv") -OUTPUT_ARCH(riscv) -ENTRY(_start) -SEARCH_DIR("/opt/riscv32i/riscv32-unknown-elf/lib"); -SECTIONS -{ - /* Read-only sections, merged into text segment: */ - PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x10000)); . = SEGMENT_START("text-segment", 0x10000) + SIZEOF_HEADERS; - .interp : { *(.interp) } - .note.gnu.build-id : { *(.note.gnu.build-id) } - .hash : { *(.hash) } - .gnu.hash : { *(.gnu.hash) } - .dynsym : { *(.dynsym) } - .dynstr : { *(.dynstr) } - .gnu.version : { *(.gnu.version) } - .gnu.version_d : { *(.gnu.version_d) } - .gnu.version_r : { *(.gnu.version_r) } - .rela.init : { *(.rela.init) } - .rela.text : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) } - .rela.fini : { *(.rela.fini) } - .rela.rodata : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) } - .rela.data.rel.ro : { *(.rela.data.rel.ro .rela.data.rel.ro.* .rela.gnu.linkonce.d.rel.ro.*) } - .rela.data : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) } - .rela.tdata : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) } - .rela.tbss : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) } - .rela.ctors : { *(.rela.ctors) } - .rela.dtors : { *(.rela.dtors) } - .rela.got : { *(.rela.got) } - .rela.sdata : { *(.rela.sdata .rela.sdata.* .rela.gnu.linkonce.s.*) } - .rela.sbss : { *(.rela.sbss .rela.sbss.* .rela.gnu.linkonce.sb.*) } - .rela.sdata2 : { *(.rela.sdata2 .rela.sdata2.* .rela.gnu.linkonce.s2.*) } - .rela.sbss2 : { *(.rela.sbss2 .rela.sbss2.* .rela.gnu.linkonce.sb2.*) } - .rela.bss : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) } - .rela.iplt : - { - PROVIDE_HIDDEN (__rela_iplt_start = .); - *(.rela.iplt) - PROVIDE_HIDDEN (__rela_iplt_end = .); - } - .rela.plt : - { - *(.rela.plt) - } - .init : - { - KEEP (*(SORT_NONE(.init))) - } - .plt : { *(.plt) } - .iplt : { *(.iplt) } - .text : - { - *(.text.unlikely .text.*_unlikely .text.unlikely.*) - *(.text.exit .text.exit.*) - *(.text.startup .text.startup.*) - *(.text.hot .text.hot.*) - *(.text .stub .text.* .gnu.linkonce.t.*) - /* .gnu.warning sections are handled specially by elf32.em. */ - *(.gnu.warning) - } - .fini : - { - KEEP (*(SORT_NONE(.fini))) - } - PROVIDE (__etext = .); - PROVIDE (_etext = .); - PROVIDE (etext = .); - .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } - .rodata1 : { *(.rodata1) } - .sdata2 : - { - *(.sdata2 .sdata2.* .gnu.linkonce.s2.*) - } - .sbss2 : { *(.sbss2 .sbss2.* .gnu.linkonce.sb2.*) } - .eh_frame_hdr : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) } - .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) } - .gcc_except_table : ONLY_IF_RO { *(.gcc_except_table - .gcc_except_table.*) } - .gnu_extab : ONLY_IF_RO { *(.gnu_extab*) } - /* These sections are generated by the Sun/Oracle C++ compiler. */ - .exception_ranges : ONLY_IF_RO { *(.exception_ranges - .exception_ranges*) } - /* Adjust the address for the data segment. We want to adjust up to - the same address within the page on the next page up. */ - . = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE)); - /* Exception handling */ - .eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) } - .gnu_extab : ONLY_IF_RW { *(.gnu_extab) } - .gcc_except_table : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) } - .exception_ranges : ONLY_IF_RW { *(.exception_ranges .exception_ranges*) } - /* Thread Local Storage sections */ - .tdata : { *(.tdata .tdata.* .gnu.linkonce.td.*) } - .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } - .preinit_array : - { - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP (*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - } - .init_array : - { - PROVIDE_HIDDEN (__init_array_start = .); - KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) - KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) - PROVIDE_HIDDEN (__init_array_end = .); - } - .fini_array : - { - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) - KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) - PROVIDE_HIDDEN (__fini_array_end = .); - } - .ctors : - { - /* gcc uses crtbegin.o to find the start of - the constructors, so we make sure it is - first. Because this is a wildcard, it - doesn't matter if the user does not - actually link against crtbegin.o; the - linker won't look for a file to match a - wildcard. The wildcard also means that it - doesn't matter which directory crtbegin.o - is in. */ - KEEP (*crtbegin.o(.ctors)) - KEEP (*crtbegin?.o(.ctors)) - /* We don't want to include the .ctor section from - the crtend.o file until after the sorted ctors. - The .ctor section from the crtend file contains the - end of ctors marker and it must be last */ - KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) - KEEP (*(SORT(.ctors.*))) - KEEP (*(.ctors)) - } - .dtors : - { - KEEP (*crtbegin.o(.dtors)) - KEEP (*crtbegin?.o(.dtors)) - KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) - KEEP (*(SORT(.dtors.*))) - KEEP (*(.dtors)) - } - .jcr : { KEEP (*(.jcr)) } - .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) } - .dynamic : { *(.dynamic) } - . = DATA_SEGMENT_RELRO_END (0, .); - .data : - { - *(.data .data.* .gnu.linkonce.d.*) - SORT(CONSTRUCTORS) - } - .data1 : { *(.data1) } - .got : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) } - /* We want the small data sections together, so single-instruction offsets - can access them all, and initialized data all before uninitialized, so - we can shorten the on-disk segment size. */ - .sdata : - { - __global_pointer$ = . + 0x800; - *(.srodata.cst16) *(.srodata.cst8) *(.srodata.cst4) *(.srodata.cst2) *(.srodata .srodata.*) - *(.sdata .sdata.* .gnu.linkonce.s.*) - } - _edata = .; PROVIDE (edata = .); - . = .; - __bss_start = .; - .sbss : - { - *(.dynsbss) - *(.sbss .sbss.* .gnu.linkonce.sb.*) - *(.scommon) - } - .bss : - { - *(.dynbss) - *(.bss .bss.* .gnu.linkonce.b.*) - *(COMMON) - /* Align here to ensure that the .bss section occupies space up to - _end. Align after .bss to ensure correct alignment even if the - .bss section disappears because there are no input sections. - FIXME: Why do we need it? When there is no .bss section, we don't - pad the .data section. */ - . = ALIGN(. != 0 ? 32 / 8 : 1); - } - . = ALIGN(32 / 8); - . = SEGMENT_START("ldata-segment", .); - . = ALIGN(32 / 8); - _end = .; PROVIDE (end = .); - . = DATA_SEGMENT_END (.); - /* Stabs debugging sections. */ - .stab 0 : { *(.stab) } - .stabstr 0 : { *(.stabstr) } - .stab.excl 0 : { *(.stab.excl) } - .stab.exclstr 0 : { *(.stab.exclstr) } - .stab.index 0 : { *(.stab.index) } - .stab.indexstr 0 : { *(.stab.indexstr) } - .comment 0 : { *(.comment) } - /* DWARF debug sections. - Symbols in the DWARF debugging sections are relative to the beginning - of the section so we begin them at 0. */ - /* DWARF 1 */ - .debug 0 : { *(.debug) } - .line 0 : { *(.line) } - /* GNU DWARF 1 extensions */ - .debug_srcinfo 0 : { *(.debug_srcinfo) } - .debug_sfnames 0 : { *(.debug_sfnames) } - /* DWARF 1.1 and DWARF 2 */ - .debug_aranges 0 : { *(.debug_aranges) } - .debug_pubnames 0 : { *(.debug_pubnames) } - /* DWARF 2 */ - .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } - .debug_abbrev 0 : { *(.debug_abbrev) } - .debug_line 0 : { *(.debug_line .debug_line.* .debug_line_end ) } - .debug_frame 0 : { *(.debug_frame) } - .debug_str 0 : { *(.debug_str) } - .debug_loc 0 : { *(.debug_loc) } - .debug_macinfo 0 : { *(.debug_macinfo) } - /* SGI/MIPS DWARF 2 extensions */ - .debug_weaknames 0 : { *(.debug_weaknames) } - .debug_funcnames 0 : { *(.debug_funcnames) } - .debug_typenames 0 : { *(.debug_typenames) } - .debug_varnames 0 : { *(.debug_varnames) } - /* DWARF 3 */ - .debug_pubtypes 0 : { *(.debug_pubtypes) } - .debug_ranges 0 : { *(.debug_ranges) } - /* DWARF Extension. */ - .debug_macro 0 : { *(.debug_macro) } - .debug_addr 0 : { *(.debug_addr) } - .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) } - /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) } -} diff --git a/picorv32_firmware/firmware/sections.lds b/picorv32_firmware/firmware/sections.lds deleted file mode 100644 index 948814b..0000000 --- a/picorv32_firmware/firmware/sections.lds +++ /dev/null @@ -1,24 +0,0 @@ -/* -This is free and unencumbered software released into the public domain. - -Anyone is free to copy, modify, publish, use, compile, sell, or -distribute this software, either in source code form or as a compiled -binary, for any purpose, commercial or non-commercial, and by any -means. -*/ - -MEMORY { - /* the memory in the testbench is 64k in size; - * set LENGTH=48k and leave at least 16k for stack */ - mem : ORIGIN = 0x00000000, LENGTH = 0x0000c000 -} - -SECTIONS { - .memory : { - . = 0x000000; - start*(.text); - *(.text); - *(*); - end = .; - } > mem -} diff --git a/picorv32_firmware/firmware/sieve.c b/picorv32_firmware/firmware/sieve.c deleted file mode 100644 index ff945eb..0000000 --- a/picorv32_firmware/firmware/sieve.c +++ /dev/null @@ -1,84 +0,0 @@ -// This is free and unencumbered software released into the public domain. -// -// Anyone is free to copy, modify, publish, use, compile, sell, or -// distribute this software, either in source code form or as a compiled -// binary, for any purpose, commercial or non-commercial, and by any -// means. - -// A simple Sieve of Eratosthenes - -#include "firmware.h" - -#define BITMAP_SIZE 64 - -static uint32_t bitmap[BITMAP_SIZE/32]; -static uint32_t hash; - -static uint32_t mkhash(uint32_t a, uint32_t b) -{ - // The XOR version of DJB2 - return ((a << 5) + a) ^ b; -} - -static void bitmap_set(int idx) -{ - bitmap[idx/32] |= 1 << (idx % 32); -} - -static bool bitmap_get(int idx) -{ - return (bitmap[idx/32] & (1 << (idx % 32))) != 0; -} - -static void print_prime(int idx, int val) -{ - if (idx < 10) - print_str(" "); - print_dec(idx); - if (idx / 10 == 1) - goto force_th; - switch (idx % 10) { - case 1: print_str("st"); break; - case 2: print_str("nd"); break; - case 3: print_str("rd"); break; - force_th: - default: print_str("th"); break; - } - print_str(" prime is "); - print_dec(val); - print_str(".\n"); - - hash = mkhash(hash, idx); - hash = mkhash(hash, val); -} - -void sieve(void) -{ - int idx = 1; - hash = 5381; - print_prime(idx++, 2); - for (int i = 0; i < BITMAP_SIZE; i++) { - if (bitmap_get(i)) - continue; - print_prime(idx++, 3+2*i); - for (int j = 2*(3+2*i);; j += 3+2*i) { - if (j%2 == 0) - continue; - int k = (j-3)/2; - if (k >= BITMAP_SIZE) - break; - bitmap_set(k); - } - } - - print_str("checksum: "); - print_hex(hash, 8); - - if (hash == 0x1772A48F) { - print_str(" OK\n"); - } else { - print_str(" ERROR\n"); - __asm__ volatile ("ebreak"); - } -} - diff --git a/picorv32_firmware/firmware/sieve.o b/picorv32_firmware/firmware/sieve.o deleted file mode 100644 index cf5f3405afb3a2d6ba34bfa9114986f0e02e8643..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3328 zcma);Pi$0G6voe+H`6IC>a?#=n5i&jDwIE&bQqvOOf2EAkpLp33r))KW^5Zfv~)&- zk;GytMOK<8aZ?i(m~Jp3sYy3(*t&9Ij5|#vDI_jxEVKc%e&4)%rq5ZZC%O0j&Uel` z@80|Fn>QaFK7PcqEK#%M4_WafLB4xsvB8Vnu8AeZ4L`2;qFv(Fag2$(?s0u> zy;|RySgBtd>yCkQBTytKj_1KhWW+&^bqh5HclCVNjgk(kVeMZ8E-us@+xvfWPYIAEo=y=kR7a~Ae0 zluBnXUbIrT7o>ZYRQIL3LB)={v)hh8CV&XK;+fKt%%jrGS8|G@jlrn-UO~`TvM&*t?dx+`n%#St`+y=XxN$jaoOu_?Qwgag`M91 zO1+uIqgJ-=k+?ra#hYAQ_U590d6TWU&m-~g^HgT$=CC(UWaj!FYk0oznKRLdXN`MC zCH!m4!V}#aeb)9@VXS|wIuCm~EVI+2t*C#@-LM$Ko`>)(LfGq&z10ehZ@q8X+pb#U z+YVUvcFP*ye!sf+*k8NV7U>tes_A`765})V>-|eD*5LC@ib$y}av?7=idG(gHZnR` zEF=d@2&NlE+<}7oUg`bfe)!3gZ$QC#`1I+Mr-4Tg9^9YoJbL2n)?{~jXS$2Q8VkNR zVflSI7`7!C6|4vg3z#io!EvZqJyJu+Ut@e63wU)B$4IU>K8C8LSiHB?JC$Fz@ACMD_z#tBd^Cz_EaT2;33yUk9)3Q$$X{-y4X(^^dqE zz3`t`wWQ-wRLM_7r8AdWp&M=-~LWUWc zJ<``#9L|>pvt}lx@~EMF!S!cp{DA@Zho;`#M?m5pdjmugI$7wU>m^$*S}0=zYnmkAdUnpp#X<22L2AtojYG)*-9@ zIdwCCvg%Xd_zUP@WYuqj6GkVieg~}e$*SK4$Lr9+$g1B1CyY*3{ReQH(aEYm0LNcM z2P3Qg5S%bNS@n5v{3UcSvg!-qgwe^W^PP^z(80*6W9EOf3oVw zn2+x~jjZ}{aI^VYB&&W7oG|%h)u#gaWYt&WosT#9^~tKozzL(1Rc`_7^CGL>#(cB? zWYs&E|B7Fqton{XK3Vm1;CQp2PgXt8e4~?99|G%q$g1|#ktHh1~|69k|OuW{1C#v zB`19Tp3I5BmcUIf`&^HC#y0r8m%PzuNtZq-mUHJZmPh?@KxwovluMTjm&=mQ=gK)r zpD&dpJvvN>>6tWs8%q_@9WE9N7s{sQ{}__U!SwKT_H7r2Z!j;lumLWM+++MRxZn$e$Nt&u@;T5WiW3E-<^|{ Ih~H`6-}t^=asU7T diff --git a/picorv32_firmware/firmware/start.S b/picorv32_firmware/firmware/start.S deleted file mode 100644 index 82399ba..0000000 --- a/picorv32_firmware/firmware/start.S +++ /dev/null @@ -1,507 +0,0 @@ -// This is free and unencumbered software released into the public domain. -// -// Anyone is free to copy, modify, publish, use, compile, sell, or -// distribute this software, either in source code form or as a compiled -// binary, for any purpose, commercial or non-commercial, and by any -// means. - -#define ENABLE_QREGS -#define ENABLE_RVTST -#define ENABLE_SIEVE -//#define ENABLE_MULTST -#define ENABLE_STATS - -#ifndef ENABLE_QREGS -# undef ENABLE_RVTST -#endif - -// Only save registers in IRQ wrapper that are to be saved by the caller in -// the RISC-V ABI, with the excpetion of the stack pointer. The IRQ handler -// will save the rest if necessary. I.e. skip x3, x4, x8, x9, and x18-x27. -#undef ENABLE_FASTIRQ - -#include "custom_ops.S" - - .section .text - .global irq - .global sieve - .global multest - .global hard_mul - .global hard_mulh - .global hard_mulhsu - .global hard_mulhu - .global stats - -reset_vec: - // no more than 16 bytes here ! - picorv32_waitirq_insn(zero) - picorv32_maskirq_insn(zero, zero) - j start - - -/* Interrupt handler - **********************************/ - -.balign 16 -irq_vec: - /* save registers */ - -#ifdef ENABLE_QREGS - - picorv32_setq_insn(q2, x1) - picorv32_setq_insn(q3, x2) - - lui x1, %hi(irq_regs) - addi x1, x1, %lo(irq_regs) - - picorv32_getq_insn(x2, q0) - sw x2, 0*4(x1) - - picorv32_getq_insn(x2, q2) - sw x2, 1*4(x1) - - picorv32_getq_insn(x2, q3) - sw x2, 2*4(x1) - -#ifdef ENABLE_FASTIRQ - sw x5, 5*4(x1) - sw x6, 6*4(x1) - sw x7, 7*4(x1) - sw x10, 10*4(x1) - sw x11, 11*4(x1) - sw x12, 12*4(x1) - sw x13, 13*4(x1) - sw x14, 14*4(x1) - sw x15, 15*4(x1) - sw x16, 16*4(x1) - sw x17, 17*4(x1) - sw x28, 28*4(x1) - sw x29, 29*4(x1) - sw x30, 30*4(x1) - sw x31, 31*4(x1) -#else - sw x3, 3*4(x1) - sw x4, 4*4(x1) - sw x5, 5*4(x1) - sw x6, 6*4(x1) - sw x7, 7*4(x1) - sw x8, 8*4(x1) - sw x9, 9*4(x1) - sw x10, 10*4(x1) - sw x11, 11*4(x1) - sw x12, 12*4(x1) - sw x13, 13*4(x1) - sw x14, 14*4(x1) - sw x15, 15*4(x1) - sw x16, 16*4(x1) - sw x17, 17*4(x1) - sw x18, 18*4(x1) - sw x19, 19*4(x1) - sw x20, 20*4(x1) - sw x21, 21*4(x1) - sw x22, 22*4(x1) - sw x23, 23*4(x1) - sw x24, 24*4(x1) - sw x25, 25*4(x1) - sw x26, 26*4(x1) - sw x27, 27*4(x1) - sw x28, 28*4(x1) - sw x29, 29*4(x1) - sw x30, 30*4(x1) - sw x31, 31*4(x1) -#endif - -#else // ENABLE_QREGS - -#ifdef ENABLE_FASTIRQ - sw gp, 0*4+0x200(zero) - sw x1, 1*4+0x200(zero) - sw x2, 2*4+0x200(zero) - sw x5, 5*4+0x200(zero) - sw x6, 6*4+0x200(zero) - sw x7, 7*4+0x200(zero) - sw x10, 10*4+0x200(zero) - sw x11, 11*4+0x200(zero) - sw x12, 12*4+0x200(zero) - sw x13, 13*4+0x200(zero) - sw x14, 14*4+0x200(zero) - sw x15, 15*4+0x200(zero) - sw x16, 16*4+0x200(zero) - sw x17, 17*4+0x200(zero) - sw x28, 28*4+0x200(zero) - sw x29, 29*4+0x200(zero) - sw x30, 30*4+0x200(zero) - sw x31, 31*4+0x200(zero) -#else - sw gp, 0*4+0x200(zero) - sw x1, 1*4+0x200(zero) - sw x2, 2*4+0x200(zero) - sw x3, 3*4+0x200(zero) - sw x4, 4*4+0x200(zero) - sw x5, 5*4+0x200(zero) - sw x6, 6*4+0x200(zero) - sw x7, 7*4+0x200(zero) - sw x8, 8*4+0x200(zero) - sw x9, 9*4+0x200(zero) - sw x10, 10*4+0x200(zero) - sw x11, 11*4+0x200(zero) - sw x12, 12*4+0x200(zero) - sw x13, 13*4+0x200(zero) - sw x14, 14*4+0x200(zero) - sw x15, 15*4+0x200(zero) - sw x16, 16*4+0x200(zero) - sw x17, 17*4+0x200(zero) - sw x18, 18*4+0x200(zero) - sw x19, 19*4+0x200(zero) - sw x20, 20*4+0x200(zero) - sw x21, 21*4+0x200(zero) - sw x22, 22*4+0x200(zero) - sw x23, 23*4+0x200(zero) - sw x24, 24*4+0x200(zero) - sw x25, 25*4+0x200(zero) - sw x26, 26*4+0x200(zero) - sw x27, 27*4+0x200(zero) - sw x28, 28*4+0x200(zero) - sw x29, 29*4+0x200(zero) - sw x30, 30*4+0x200(zero) - sw x31, 31*4+0x200(zero) -#endif - -#endif // ENABLE_QREGS - - /* call interrupt handler C function */ - - lui sp, %hi(irq_stack) - addi sp, sp, %lo(irq_stack) - - // arg0 = address of regs - lui a0, %hi(irq_regs) - addi a0, a0, %lo(irq_regs) - - // arg1 = interrupt type -#ifdef ENABLE_QREGS - picorv32_getq_insn(a1, q1) -#else - addi a1, tp, 0 -#endif - - // call to C function - jal ra, irq - - /* restore registers */ - -#ifdef ENABLE_QREGS - - // new irq_regs address returned from C code in a0 - addi x1, a0, 0 - - lw x2, 0*4(x1) - picorv32_setq_insn(q0, x2) - - lw x2, 1*4(x1) - picorv32_setq_insn(q1, x2) - - lw x2, 2*4(x1) - picorv32_setq_insn(q2, x2) - -#ifdef ENABLE_FASTIRQ - lw x5, 5*4(x1) - lw x6, 6*4(x1) - lw x7, 7*4(x1) - lw x10, 10*4(x1) - lw x11, 11*4(x1) - lw x12, 12*4(x1) - lw x13, 13*4(x1) - lw x14, 14*4(x1) - lw x15, 15*4(x1) - lw x16, 16*4(x1) - lw x17, 17*4(x1) - lw x28, 28*4(x1) - lw x29, 29*4(x1) - lw x30, 30*4(x1) - lw x31, 31*4(x1) -#else - lw x3, 3*4(x1) - lw x4, 4*4(x1) - lw x5, 5*4(x1) - lw x6, 6*4(x1) - lw x7, 7*4(x1) - lw x8, 8*4(x1) - lw x9, 9*4(x1) - lw x10, 10*4(x1) - lw x11, 11*4(x1) - lw x12, 12*4(x1) - lw x13, 13*4(x1) - lw x14, 14*4(x1) - lw x15, 15*4(x1) - lw x16, 16*4(x1) - lw x17, 17*4(x1) - lw x18, 18*4(x1) - lw x19, 19*4(x1) - lw x20, 20*4(x1) - lw x21, 21*4(x1) - lw x22, 22*4(x1) - lw x23, 23*4(x1) - lw x24, 24*4(x1) - lw x25, 25*4(x1) - lw x26, 26*4(x1) - lw x27, 27*4(x1) - lw x28, 28*4(x1) - lw x29, 29*4(x1) - lw x30, 30*4(x1) - lw x31, 31*4(x1) -#endif - - picorv32_getq_insn(x1, q1) - picorv32_getq_insn(x2, q2) - -#else // ENABLE_QREGS - - // new irq_regs address returned from C code in a0 - addi a1, zero, 0x200 - beq a0, a1, 1f - ebreak -1: - -#ifdef ENABLE_FASTIRQ - lw gp, 0*4+0x200(zero) - lw x1, 1*4+0x200(zero) - lw x2, 2*4+0x200(zero) - lw x5, 5*4+0x200(zero) - lw x6, 6*4+0x200(zero) - lw x7, 7*4+0x200(zero) - lw x10, 10*4+0x200(zero) - lw x11, 11*4+0x200(zero) - lw x12, 12*4+0x200(zero) - lw x13, 13*4+0x200(zero) - lw x14, 14*4+0x200(zero) - lw x15, 15*4+0x200(zero) - lw x16, 16*4+0x200(zero) - lw x17, 17*4+0x200(zero) - lw x28, 28*4+0x200(zero) - lw x29, 29*4+0x200(zero) - lw x30, 30*4+0x200(zero) - lw x31, 31*4+0x200(zero) -#else - lw gp, 0*4+0x200(zero) - lw x1, 1*4+0x200(zero) - lw x2, 2*4+0x200(zero) - // do not restore x3 (gp) - lw x4, 4*4+0x200(zero) - lw x5, 5*4+0x200(zero) - lw x6, 6*4+0x200(zero) - lw x7, 7*4+0x200(zero) - lw x8, 8*4+0x200(zero) - lw x9, 9*4+0x200(zero) - lw x10, 10*4+0x200(zero) - lw x11, 11*4+0x200(zero) - lw x12, 12*4+0x200(zero) - lw x13, 13*4+0x200(zero) - lw x14, 14*4+0x200(zero) - lw x15, 15*4+0x200(zero) - lw x16, 16*4+0x200(zero) - lw x17, 17*4+0x200(zero) - lw x18, 18*4+0x200(zero) - lw x19, 19*4+0x200(zero) - lw x20, 20*4+0x200(zero) - lw x21, 21*4+0x200(zero) - lw x22, 22*4+0x200(zero) - lw x23, 23*4+0x200(zero) - lw x24, 24*4+0x200(zero) - lw x25, 25*4+0x200(zero) - lw x26, 26*4+0x200(zero) - lw x27, 27*4+0x200(zero) - lw x28, 28*4+0x200(zero) - lw x29, 29*4+0x200(zero) - lw x30, 30*4+0x200(zero) - lw x31, 31*4+0x200(zero) -#endif - -#endif // ENABLE_QREGS - - picorv32_retirq_insn() - -#ifndef ENABLE_QREGS -.balign 0x200 -#endif -irq_regs: - // registers are saved to this memory region during interrupt handling - // the program counter is saved as register 0 - .fill 32,4 - - // stack for the interrupt handler - .fill 128,4 -irq_stack: - - -/* Main program - **********************************/ - -start: - /* zero-initialize all registers */ - - addi x1, zero, 0 - addi x2, zero, 0 - addi x3, zero, 0 - addi x4, zero, 0 - addi x5, zero, 0 - addi x6, zero, 0 - addi x7, zero, 0 - addi x8, zero, 0 - addi x9, zero, 0 - addi x10, zero, 0 - addi x11, zero, 0 - addi x12, zero, 0 - addi x13, zero, 0 - addi x14, zero, 0 - addi x15, zero, 0 - addi x16, zero, 0 - addi x17, zero, 0 - addi x18, zero, 0 - addi x19, zero, 0 - addi x20, zero, 0 - addi x21, zero, 0 - addi x22, zero, 0 - addi x23, zero, 0 - addi x24, zero, 0 - addi x25, zero, 0 - addi x26, zero, 0 - addi x27, zero, 0 - addi x28, zero, 0 - addi x29, zero, 0 - addi x30, zero, 0 - addi x31, zero, 0 - - /* running tests from riscv-tests */ - -#ifdef ENABLE_RVTST -# define TEST(n) \ - .global n; \ - addi x1, zero, 1000; \ - picorv32_timer_insn(zero, x1); \ - jal zero,n; \ - .global n ## _ret; \ - n ## _ret: -#else -# define TEST(n) \ - .global n ## _ret; \ - n ## _ret: -#endif - - TEST(lui) - TEST(auipc) - TEST(j) - TEST(jal) - TEST(jalr) - - TEST(beq) - TEST(bne) - TEST(blt) - TEST(bge) - TEST(bltu) - TEST(bgeu) - - TEST(lb) - TEST(lh) - TEST(lw) - TEST(lbu) - TEST(lhu) - - TEST(sb) - TEST(sh) - TEST(sw) - - TEST(addi) - TEST(slti) // also tests sltiu - TEST(xori) - TEST(ori) - TEST(andi) - TEST(slli) - TEST(srli) - TEST(srai) - - TEST(add) - TEST(sub) - TEST(sll) - TEST(slt) // what is with sltu ? - TEST(xor) - TEST(srl) - TEST(sra) - TEST(or) - TEST(and) - -// TEST(mulh) -// TEST(mulhsu) -// TEST(mulhu) -// TEST(mul) - -// TEST(div) -// TEST(divu) -// TEST(rem) -// TEST(remu) - - TEST(simple) - - /* set stack pointer */ - lui sp,(64*1024)>>12 - - /* set gp and tp */ - lui gp, %hi(0xdeadbeef) - addi gp, gp, %lo(0xdeadbeef) - addi tp, gp, 0 - -#ifdef ENABLE_SIEVE - /* call sieve C code */ - jal ra,sieve -#endif - -#ifdef ENABLE_MULTST - /* call multest C code */ - jal ra,multest -#endif - -#ifdef ENABLE_STATS - /* call stats C code */ - jal ra,stats -#endif - - /* print "DONE\n" */ - lui a0,0x10000000>>12 - addi a1,zero,'D' - addi a2,zero,'O' - addi a3,zero,'N' - addi a4,zero,'E' - addi a5,zero,'\n' - sw a1,0(a0) - sw a2,0(a0) - sw a3,0(a0) - sw a4,0(a0) - sw a5,0(a0) - - li a0, 0x20000000 - li a1, 123456789 - sw a1,0(a0) - - /* trap */ - ebreak - - -/* Hard mul functions for multest.c - **********************************/ - -//hard_mul: -// mul a0, a0, a1 -// ret -// -//hard_mulh: -// mulh a0, a0, a1 -// ret -// -//hard_mulhsu: -// mulhsu a0, a0, a1 -// ret -// -//hard_mulhu: -// mulhu a0, a0, a1 -// ret - diff --git a/picorv32_firmware/firmware/stats.c b/picorv32_firmware/firmware/stats.c deleted file mode 100644 index 80e22dd..0000000 --- a/picorv32_firmware/firmware/stats.c +++ /dev/null @@ -1,42 +0,0 @@ -// This is free and unencumbered software released into the public domain. -// -// Anyone is free to copy, modify, publish, use, compile, sell, or -// distribute this software, either in source code form or as a compiled -// binary, for any purpose, commercial or non-commercial, and by any -// means. - -#include "firmware.h" - -static void stats_print_dec(unsigned int val, int digits, bool zero_pad) -{ - char buffer[32]; - char *p = buffer; - while (val || digits > 0) { - if (val) - *(p++) = '0' + val % 10; - else - *(p++) = zero_pad ? '0' : ' '; - val = val / 10; - digits--; - } - while (p != buffer) { - if (p[-1] == ' ' && p[-2] == ' ') p[-1] = '.'; - print_chr(*(--p)); - } -} - -void stats(void) -{ - unsigned int num_cycles, num_instr; - __asm__ volatile ("rdcycle %0; rdinstret %1;" : "=r"(num_cycles), "=r"(num_instr)); - print_str("Cycle counter ........"); - stats_print_dec(num_cycles, 8, false); - print_str("\nInstruction counter .."); - stats_print_dec(num_instr, 8, false); - print_str("\nCPI: "); - stats_print_dec((num_cycles / num_instr), 0, false); - print_str("."); - stats_print_dec(((100 * num_cycles) / num_instr) % 100, 2, true); - print_str("\n"); -} - diff --git a/picorv32_firmware/firmware/stats.o b/picorv32_firmware/firmware/stats.o deleted file mode 100644 index 3ba1af6f7621a1de25e46f154b4cc5544d33acfa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2388 zcma)-&1+m`6vofJckaZDADNG8;|%E7JA@?EOFn8-Ly?q8jKNS95xP*~^kzr{nHinA zkyHdHOhqYf$_NP}TCjgWpc54t(*^P>(#Ja&->a$5)0Kv zSYHpq)mk-@mPGO0h3UMAk9(02nJ*Tn^TYEeKN!hR`4j#a)W9A!-$VX@~?uAN8$#HUn6l5JQIoM!P}AeZSe1r_#N=6NZdn!BXM~@A|$~d?Tc6T#h>nrKS#{H z`wK@J``3gw#(vTWOJTzglwbO!zFG~Jmdkn?>~)f^gKBGl+wvYFMxAeCmVej zZ2FUpew@1QPd552IIACgveDlH=d?~X`Xbo$Cma1k>U!VEMqi_@*CiW01ZVM5)5u2O z0Ozz$Hu@J}vo6`_-%=k`eaJ@Nrmp898~qY>ec#DOze-)tNjCZoaQ11{pKSEsz&Wjx zjeZks<|G@P--6^bs?RL>S;dRw=MNkHu%K3{l&hic_P<;nRrtC1 ziYViM`fUo@V%q26$um0s0l{rsgs%$And3GM>DYXwlcx|JBd2I-QAcq=7^5;F@noTa27sZ?8n>3SIEo;lq3@83EJ3;#@idM O+rWk_bTjH?>iz-a-2Nc| diff --git a/picorv32_firmware/tests/LICENSE b/picorv32_firmware/tests/LICENSE deleted file mode 100644 index 48fe522..0000000 --- a/picorv32_firmware/tests/LICENSE +++ /dev/null @@ -1,24 +0,0 @@ -Copyright (c) 2012-2015, The Regents of the University of California (Regents). -All Rights Reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. -3. Neither the name of the Regents nor the - names of its contributors may be used to endorse or promote products - derived from this software without specific prior written permission. - -IN NO EVENT SHALL REGENTS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, -SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, ARISING -OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF REGENTS HAS -BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -REGENTS SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE SOFTWARE AND ACCOMPANYING DOCUMENTATION, IF ANY, PROVIDED -HEREUNDER IS PROVIDED "AS IS". REGENTS HAS NO OBLIGATION TO PROVIDE -MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. diff --git a/picorv32_firmware/tests/README b/picorv32_firmware/tests/README deleted file mode 100644 index 3c1a912..0000000 --- a/picorv32_firmware/tests/README +++ /dev/null @@ -1 +0,0 @@ -Tests from https://github.com/riscv/riscv-tests/tree/master/isa/rv32ui diff --git a/picorv32_firmware/tests/add.S b/picorv32_firmware/tests/add.S deleted file mode 100644 index 2eb330e..0000000 --- a/picorv32_firmware/tests/add.S +++ /dev/null @@ -1,85 +0,0 @@ -# See LICENSE for license details. - -#***************************************************************************** -# add.S -#----------------------------------------------------------------------------- -# -# Test add instruction. -# - -#include "riscv_test.h" -#include "test_macros.h" - -RVTEST_RV32U -RVTEST_CODE_BEGIN - - #------------------------------------------------------------- - # Arithmetic tests - #------------------------------------------------------------- - - TEST_RR_OP( 2, add, 0x00000000, 0x00000000, 0x00000000 ); - TEST_RR_OP( 3, add, 0x00000002, 0x00000001, 0x00000001 ); - TEST_RR_OP( 4, add, 0x0000000a, 0x00000003, 0x00000007 ); - - TEST_RR_OP( 5, add, 0xffff8000, 0x00000000, 0xffff8000 ); - TEST_RR_OP( 6, add, 0x80000000, 0x80000000, 0x00000000 ); - TEST_RR_OP( 7, add, 0x7fff8000, 0x80000000, 0xffff8000 ); - - TEST_RR_OP( 8, add, 0x00007fff, 0x00000000, 0x00007fff ); - TEST_RR_OP( 9, add, 0x7fffffff, 0x7fffffff, 0x00000000 ); - TEST_RR_OP( 10, add, 0x80007ffe, 0x7fffffff, 0x00007fff ); - - TEST_RR_OP( 11, add, 0x80007fff, 0x80000000, 0x00007fff ); - TEST_RR_OP( 12, add, 0x7fff7fff, 0x7fffffff, 0xffff8000 ); - - TEST_RR_OP( 13, add, 0xffffffff, 0x00000000, 0xffffffff ); - TEST_RR_OP( 14, add, 0x00000000, 0xffffffff, 0x00000001 ); - TEST_RR_OP( 15, add, 0xfffffffe, 0xffffffff, 0xffffffff ); - - TEST_RR_OP( 16, add, 0x80000000, 0x00000001, 0x7fffffff ); - - #------------------------------------------------------------- - # Source/Destination tests - #------------------------------------------------------------- - - TEST_RR_SRC1_EQ_DEST( 17, add, 24, 13, 11 ); - TEST_RR_SRC2_EQ_DEST( 18, add, 25, 14, 11 ); - TEST_RR_SRC12_EQ_DEST( 19, add, 26, 13 ); - - #------------------------------------------------------------- - # Bypassing tests - #------------------------------------------------------------- - - TEST_RR_DEST_BYPASS( 20, 0, add, 24, 13, 11 ); - TEST_RR_DEST_BYPASS( 21, 1, add, 25, 14, 11 ); - TEST_RR_DEST_BYPASS( 22, 2, add, 26, 15, 11 ); - - TEST_RR_SRC12_BYPASS( 23, 0, 0, add, 24, 13, 11 ); - TEST_RR_SRC12_BYPASS( 24, 0, 1, add, 25, 14, 11 ); - TEST_RR_SRC12_BYPASS( 25, 0, 2, add, 26, 15, 11 ); - TEST_RR_SRC12_BYPASS( 26, 1, 0, add, 24, 13, 11 ); - TEST_RR_SRC12_BYPASS( 27, 1, 1, add, 25, 14, 11 ); - TEST_RR_SRC12_BYPASS( 28, 2, 0, add, 26, 15, 11 ); - - TEST_RR_SRC21_BYPASS( 29, 0, 0, add, 24, 13, 11 ); - TEST_RR_SRC21_BYPASS( 30, 0, 1, add, 25, 14, 11 ); - TEST_RR_SRC21_BYPASS( 31, 0, 2, add, 26, 15, 11 ); - TEST_RR_SRC21_BYPASS( 32, 1, 0, add, 24, 13, 11 ); - TEST_RR_SRC21_BYPASS( 33, 1, 1, add, 25, 14, 11 ); - TEST_RR_SRC21_BYPASS( 34, 2, 0, add, 26, 15, 11 ); - - TEST_RR_ZEROSRC1( 35, add, 15, 15 ); - TEST_RR_ZEROSRC2( 36, add, 32, 32 ); - TEST_RR_ZEROSRC12( 37, add, 0 ); - TEST_RR_ZERODEST( 38, add, 16, 30 ); - - TEST_PASSFAIL - -RVTEST_CODE_END - - .data -RVTEST_DATA_BEGIN - - TEST_DATA - -RVTEST_DATA_END diff --git a/picorv32_firmware/tests/add.o b/picorv32_firmware/tests/add.o deleted file mode 100644 index ccd66dd6ca6901640eb473fdfa4979ea1f28e3a8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3972 zcmb7HU1%It6h1SXO;cLdNw=-`N4wCfg|;y>lXMf?>Po9^X_O!+eF$W?lSsuh4aq)4 zEp$UgL~B``Af+u5)Q75l2&7uUJ_M{#(1%@OL9h=C)h9((+6TeX_?>(2OwK0lgE!3F z@B8M=H)qcMna#=PdtR_Ci=t-HZCYSN`%?N!hw8Rc3oWB;k|>=_Qns0#Q|N>Dle9VW z4YW0MyuN9^Ffc%2vSzc!M~HjVFrAsmPzb+tDnr4?)fYo@pgTs-KyRnuT=h^$?a)Vz zJ_S8T!6(&&?310CpJ$&dXXfYAsa^^`svf*TREqqsq<~X-_TSICh(DQ5jj;do+J|%c z+jtR$XYRqT#Mk%oePO9SFFp13GGBi#x}KeA@F<06{({F81!t?z>Sr&$&d-?U>w6YF z;`ceJpE1kVcj=ndReoU#xuhx-T&Q-3#Cb(EgMX?O&Ul(-~3)HJGNE5|2yCN~atvI9KsQswv%9<5h;9v4Y2{F2~Q59K=pRYqx^Qikr4k zyT}Le=~EV^?Nt=o8M?Ll<$KyUhx_Mt=veJN!?8q-@vAtVpVw;zYv;D<_`1$9ieG$> z!}oALc`MjB_vDg%qFmNSxr|t-@8dET&O_xB#j3nHkCKJ?wOQt&a$X#-^5z`Ms9$wc zoCD{|^_{@GHh6Qbr%=D@qj4T4c1bRAO{Oi3|GGFAj=!IOoXafxKg{u*gBm-TM_iAJ zh555)A+Dx;m*&j%sPX%?F2rJNOdbvKaSnB^-$PM6$1ceuo+D)A{Z=%_-Y1v19*&Lo zTQ1|Zf4#BZaV{D5Ph$O$kM)B!#rusNtYVF9A8Q$Vla0N`4j!o{W;j>1SM}OKxspJP zm9}b@uht4`n#$Y3YSeE1Yy$hC6DE6`(#@G<*j#T)FPp-?_ce|m%yGl?ztb46M-`8_ z=IN%eS;pSL{@MQ}9{s?UXxN>J68MuXK}{+m6N?tD1m;6Gi`D^bi729<0B#q22e5-Z zUN?(8fCCXld^d1j@Eq{C;QN8gg1-cOQSeuQX9e#At_dD6wj#lzHvqQ?J_f!|@VCJS z1V06SLhuj3Ck4k?(j~#qgI^c?Gw_<=UxEK4IM0ohSXa7P^c_H#;NOEE75qo=3xdyq zUlaUS@Vel)z%vP)RI}(0^gV*#20tPAzu=byPaxNy1z*9rH{nnX`!jgE;2XgE1m6sP zTJUY)R|WUMD}wI=|4s0{;CBQ+1fCP~sTbT4@B1qFZo&J&hXg+YJ|*~3@auvPgWnOn z2);$U|6Aa_f|tNcg1-wsE%=AvzX;BAr%AledGHRwKLyVV{snkh@M-X_QtuCa5CpJ)6$e7^T-#M=Pn~^r?oj7Wb>6AYS#|DG=WcaIh1AXZZdc## z>ibb0b*+>5_brb8(ZQk`*7fmN6ZvMKS=wN9?jqd*cA9n2Ms%%aUF>7MMeDpDMwp)v z;nMZwh=@;0)$mg)CNCd4z=!Y3U zrS$=!pJr@6MrVb7nX#+mXN6v4%pWMUKZWjK{W_-T8yTD0?q;n2nV|zhA7b38ea3}; zf$>hQUljT^##yabgkERdrS-c)&tMWb{NY5~&e-JB!}w{f9~Sxv#=Ersp3pBb-mUd- zh5nPkHG%5_w_vVC&t1uwKlEsQz^%_{Ol@Ot9xE1(pf8T<{%C|o2ZsvSs(51>C=?6S zb_9#7S;F871t*n=DQcud^bkH?eq-GhVuc>ONN5qSa9I}ol$Cg2flT@>fw_oSJ^d|Mp% EA31z(R{#J2 diff --git a/picorv32_firmware/tests/addi.S b/picorv32_firmware/tests/addi.S deleted file mode 100644 index f7a418b..0000000 --- a/picorv32_firmware/tests/addi.S +++ /dev/null @@ -1,71 +0,0 @@ -# See LICENSE for license details. - -#***************************************************************************** -# addi.S -#----------------------------------------------------------------------------- -# -# Test addi instruction. -# - -#include "riscv_test.h" -#include "test_macros.h" - -RVTEST_RV32U -RVTEST_CODE_BEGIN - - #------------------------------------------------------------- - # Arithmetic tests - #------------------------------------------------------------- - - TEST_IMM_OP( 2, addi, 0x00000000, 0x00000000, 0x000 ); - TEST_IMM_OP( 3, addi, 0x00000002, 0x00000001, 0x001 ); - TEST_IMM_OP( 4, addi, 0x0000000a, 0x00000003, 0x007 ); - - TEST_IMM_OP( 5, addi, 0xfffff800, 0x00000000, 0x800 ); - TEST_IMM_OP( 6, addi, 0x80000000, 0x80000000, 0x000 ); - TEST_IMM_OP( 7, addi, 0x7ffff800, 0x80000000, 0x800 ); - - TEST_IMM_OP( 8, addi, 0x000007ff, 0x00000000, 0x7ff ); - TEST_IMM_OP( 9, addi, 0x7fffffff, 0x7fffffff, 0x000 ); - TEST_IMM_OP( 10, addi, 0x800007fe, 0x7fffffff, 0x7ff ); - - TEST_IMM_OP( 11, addi, 0x800007ff, 0x80000000, 0x7ff ); - TEST_IMM_OP( 12, addi, 0x7ffff7ff, 0x7fffffff, 0x800 ); - - TEST_IMM_OP( 13, addi, 0xffffffff, 0x00000000, 0xfff ); - TEST_IMM_OP( 14, addi, 0x00000000, 0xffffffff, 0x001 ); - TEST_IMM_OP( 15, addi, 0xfffffffe, 0xffffffff, 0xfff ); - - TEST_IMM_OP( 16, addi, 0x80000000, 0x7fffffff, 0x001 ); - - #------------------------------------------------------------- - # Source/Destination tests - #------------------------------------------------------------- - - TEST_IMM_SRC1_EQ_DEST( 17, addi, 24, 13, 11 ); - - #------------------------------------------------------------- - # Bypassing tests - #------------------------------------------------------------- - - TEST_IMM_DEST_BYPASS( 18, 0, addi, 24, 13, 11 ); - TEST_IMM_DEST_BYPASS( 19, 1, addi, 23, 13, 10 ); - TEST_IMM_DEST_BYPASS( 20, 2, addi, 22, 13, 9 ); - - TEST_IMM_SRC1_BYPASS( 21, 0, addi, 24, 13, 11 ); - TEST_IMM_SRC1_BYPASS( 22, 1, addi, 23, 13, 10 ); - TEST_IMM_SRC1_BYPASS( 23, 2, addi, 22, 13, 9 ); - - TEST_IMM_ZEROSRC1( 24, addi, 32, 32 ); - TEST_IMM_ZERODEST( 25, addi, 33, 50 ); - - TEST_PASSFAIL - -RVTEST_CODE_END - - .data -RVTEST_DATA_BEGIN - - TEST_DATA - -RVTEST_DATA_END diff --git a/picorv32_firmware/tests/addi.o b/picorv32_firmware/tests/addi.o deleted file mode 100644 index c41d99d0944256ae8593da1a6a0b3d90c15d2e38..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2600 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 M5J{V(W4FleKRiTP=>Px# diff --git a/picorv32_firmware/tests/andi.S b/picorv32_firmware/tests/andi.S deleted file mode 100644 index c2ae94d..0000000 --- a/picorv32_firmware/tests/andi.S +++ /dev/null @@ -1,55 +0,0 @@ -# See LICENSE for license details. - -#***************************************************************************** -# andi.S -#----------------------------------------------------------------------------- -# -# Test andi instruction. -# - -#include "riscv_test.h" -#include "test_macros.h" - -RVTEST_RV32U -RVTEST_CODE_BEGIN - - #------------------------------------------------------------- - # Logical tests - #------------------------------------------------------------- - - TEST_IMM_OP( 2, andi, 0xff00ff00, 0xff00ff00, 0xf0f ); - TEST_IMM_OP( 3, andi, 0x000000f0, 0x0ff00ff0, 0x0f0 ); - TEST_IMM_OP( 4, andi, 0x0000000f, 0x00ff00ff, 0x70f ); - TEST_IMM_OP( 5, andi, 0x00000000, 0xf00ff00f, 0x0f0 ); - - #------------------------------------------------------------- - # Source/Destination tests - #------------------------------------------------------------- - - TEST_IMM_SRC1_EQ_DEST( 6, andi, 0x00000000, 0xff00ff00, 0x0f0 ); - - #------------------------------------------------------------- - # Bypassing tests - #------------------------------------------------------------- - - TEST_IMM_DEST_BYPASS( 7, 0, andi, 0x00000700, 0x0ff00ff0, 0x70f ); - TEST_IMM_DEST_BYPASS( 8, 1, andi, 0x000000f0, 0x00ff00ff, 0x0f0 ); - TEST_IMM_DEST_BYPASS( 9, 2, andi, 0xf00ff00f, 0xf00ff00f, 0xf0f ); - - TEST_IMM_SRC1_BYPASS( 10, 0, andi, 0x00000700, 0x0ff00ff0, 0x70f ); - TEST_IMM_SRC1_BYPASS( 11, 1, andi, 0x000000f0, 0x00ff00ff, 0x0f0 ); - TEST_IMM_SRC1_BYPASS( 12, 2, andi, 0x0000000f, 0xf00ff00f, 0x70f ); - - TEST_IMM_ZEROSRC1( 13, andi, 0, 0x0f0 ); - TEST_IMM_ZERODEST( 14, andi, 0x00ff00ff, 0x70f ); - - TEST_PASSFAIL - -RVTEST_CODE_END - - .data -RVTEST_DATA_BEGIN - - TEST_DATA - -RVTEST_DATA_END diff --git a/picorv32_firmware/tests/andi.o b/picorv32_firmware/tests/andi.o deleted file mode 100644 index b72885d703d8bce4e766ecf97799adb130de0404..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2004 zcmb7EO-Ni<6#m})sYKp9ebF?UHUkO4MKU=4*4-@9pM?|&6uJnQ@i{?>F@rM;O9K_$ z6k0@h5?r{Dthy-0McZk2Qd-C&3&jSq=t2nHb#WzG2F-WweRsS`$RcOB_k7=X&zyVi z&%57#GWn_Jd9dc;IZhd{kuxJB+6|x`Z5Yo2VK$5L9D-H)=!YyW6@H`EgL~@YNo8?% zUc%$-VM=sqO?W5q3RHZgRMRJ3^Ht~<5N+)DHv^UD*hzeZeC#71`h$oz_s=(Rf_Q~v zN2(V43ZY*{w6%Y(sq%_Cl6dM%=7F&nxT`OMKF8jDE`%VcRy(^;fpPllCO>|DldR?g--w8|ly_SCwHpYe`ExCejE*R@L=TgtFP5_Y2gHXC-y#m2|34)E+~Gfx*Bt&c`If^^b2AU~|G{x< zfq-J8T5n7*R_<0&tSyP3UaT%RT4eU#Vih`O2)8Tq3kDAxH)7nVabw1f8~3qs6ULPW z6JJXFP~wwJr4iIB^*V}^rBq4xL%JW<{fO>Ibw39EZb>)2RBa@S>C4zv0mBItsXx)h zSzXp0B=6+~;x4|EVv}q^yM~x`@O=kwIQSw6;Jo0}T zlea_O2;ug%S$1+!Zsog5EXVn-ILRR<-c2F-4k=2#azA8VxicMXHWwkj;=rE*60`Zb P$lbVGOjNQ#^fvAlMwKkT diff --git a/picorv32_firmware/tests/auipc.S b/picorv32_firmware/tests/auipc.S deleted file mode 100644 index c67e3c9..0000000 --- a/picorv32_firmware/tests/auipc.S +++ /dev/null @@ -1,39 +0,0 @@ -# See LICENSE for license details. - -#***************************************************************************** -# auipc.S -#----------------------------------------------------------------------------- -# -# Test auipc instruction. -# - -#include "riscv_test.h" -#include "test_macros.h" - -RVTEST_RV32U -RVTEST_CODE_BEGIN - - TEST_CASE(2, a0, 10000, \ - .align 3; \ - lla a0, 1f + 10000; \ - jal a1, 1f; \ - 1: sub a0, a0, a1; \ - ) - - TEST_CASE(3, a0, -10000, \ - .align 3; \ - lla a0, 1f - 10000; \ - jal a1, 1f; \ - 1: sub a0, a0, a1; \ - ) - - TEST_PASSFAIL - -RVTEST_CODE_END - - .data -RVTEST_DATA_BEGIN - - TEST_DATA - -RVTEST_DATA_END diff --git a/picorv32_firmware/tests/auipc.o b/picorv32_firmware/tests/auipc.o deleted file mode 100644 index bb91f0f9b7ceec844195401c72eda92ee7f187c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1268 zcmb7DO=}ZT6upzlOygIaFlu5eI3U!5?a(Ab6-2U7K`7`#!G(}claUtMG$tcN5G=SA zUE~k=6S}avb>q&3n}ACG(_f;z_E9&fUuo-K=(m`!)~MM;)`+Mrlh^oiA8B@@+{iiN^xDfQNJ(YYBg8Ix*RB2lk_>L zwb_f4^sw3d;h}X6nVQpi29xKkuECk(ca~4#-d9sh4e>3+iXJ+#spT9^EoV?ZBQpLm znGjP$yoOjQVu7u}O|1v)xmaMA;3d3YS_59f9cYi>UO_==Bb3meHh`P_E8>&PihP5Y z*q9dfUv4MSI%3jG7smxP8_D diff --git a/picorv32_firmware/tests/beq.S b/picorv32_firmware/tests/beq.S deleted file mode 100644 index c972eff..0000000 --- a/picorv32_firmware/tests/beq.S +++ /dev/null @@ -1,73 +0,0 @@ -# See LICENSE for license details. - -#***************************************************************************** -# beq.S -#----------------------------------------------------------------------------- -# -# Test beq instruction. -# - -#include "riscv_test.h" -#include "test_macros.h" - -RVTEST_RV32U -RVTEST_CODE_BEGIN - - #------------------------------------------------------------- - # Branch tests - #------------------------------------------------------------- - - # Each test checks both forward and backward branches - - TEST_BR2_OP_TAKEN( 2, beq, 0, 0 ); - TEST_BR2_OP_TAKEN( 3, beq, 1, 1 ); - TEST_BR2_OP_TAKEN( 4, beq, -1, -1 ); - - TEST_BR2_OP_NOTTAKEN( 5, beq, 0, 1 ); - TEST_BR2_OP_NOTTAKEN( 6, beq, 1, 0 ); - TEST_BR2_OP_NOTTAKEN( 7, beq, -1, 1 ); - TEST_BR2_OP_NOTTAKEN( 8, beq, 1, -1 ); - - #------------------------------------------------------------- - # Bypassing tests - #------------------------------------------------------------- - - TEST_BR2_SRC12_BYPASS( 9, 0, 0, beq, 0, -1 ); - TEST_BR2_SRC12_BYPASS( 10, 0, 1, beq, 0, -1 ); - TEST_BR2_SRC12_BYPASS( 11, 0, 2, beq, 0, -1 ); - TEST_BR2_SRC12_BYPASS( 12, 1, 0, beq, 0, -1 ); - TEST_BR2_SRC12_BYPASS( 13, 1, 1, beq, 0, -1 ); - TEST_BR2_SRC12_BYPASS( 14, 2, 0, beq, 0, -1 ); - - TEST_BR2_SRC12_BYPASS( 15, 0, 0, beq, 0, -1 ); - TEST_BR2_SRC12_BYPASS( 16, 0, 1, beq, 0, -1 ); - TEST_BR2_SRC12_BYPASS( 17, 0, 2, beq, 0, -1 ); - TEST_BR2_SRC12_BYPASS( 18, 1, 0, beq, 0, -1 ); - TEST_BR2_SRC12_BYPASS( 19, 1, 1, beq, 0, -1 ); - TEST_BR2_SRC12_BYPASS( 20, 2, 0, beq, 0, -1 ); - - #------------------------------------------------------------- - # Test delay slot instructions not executed nor bypassed - #------------------------------------------------------------- - - TEST_CASE( 21, x1, 3, \ - li x1, 1; \ - beq x0, x0, 1f; \ - addi x1, x1, 1; \ - addi x1, x1, 1; \ - addi x1, x1, 1; \ - addi x1, x1, 1; \ -1: addi x1, x1, 1; \ - addi x1, x1, 1; \ - ) - - TEST_PASSFAIL - -RVTEST_CODE_END - - .data -RVTEST_DATA_BEGIN - - TEST_DATA - -RVTEST_DATA_END diff --git a/picorv32_firmware/tests/beq.o b/picorv32_firmware/tests/beq.o deleted file mode 100644 index 372102c5d8f6e7acbcde17a7ba2f286ad710150b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3416 zcmb7`O-x)>6vxkd%nXQxJQyTMvAh;4Aa&#o-<8Ffpt2y^7pjV4Y~ zqNHsalIfy}E=Y7iq6-o~(xhEXA|@`3VPO+uSWMDty69q}E?kh}|J;wqq3FU(?!CYN zIsbRw+&A~#;iH!)UvV6VY;)*OI#5I{bviSkrf#aCY8s9b#iLOgj*)j6bLL8vI{fbt zdx|bp+V^L(?^7{ab~&cv^*$AGeH?`|AN!PPDfMQWOU}LP{-aD|sW)EVhrEZpXY)NG z-xIG-Az#^#JC%KNeV530#p}i#=UK>rPQHwOQx>4uC;VR z=L+UJ+|ypyR%+L|HHy1r?umTCKOT1*sp$H2ulWt!bNx_0jmm;i9MS~Jj!>) zZwY;k>?xm+LVp0gCiG?K zTS8xjE(=|RCb7OxAv=Zs9C}jdFQJ!&{u=tG(6^yWLVpkKS7A`iQEQ*Dk{tROET88u z(BmTiD|lY$GFU$E-=XJ3{vmi(=s&>n`}iArMdTlWzYsctXR{%6Ep$m}4|+@JX6Rj^ z+n~!rpM>Un>gG^4^q!Sie*(G&-R1|t?6LX`cv9$>ziK<^0s3AAk<)_3)gMkbNZ=JL~v>GN4iEG_dqy_mh2 z55?St#VjdLlHN_fx1hOSPXl@y)YFijhV?X}r%^oxeP#~KoHVnk6qr(hsTG)FfvFal za)GIrH1(1JEv0igN=zo*0As%z12rbyq>AtuC{DWlD#Bx+IB*BRNi_!Upkf{acStdh zfjg|2$G{y?sFXH5D=fv%1fsi3Zg^(dulU^PnVDp(8u+krm4oXzWRt2JW3 zHKKll96Dy=JlVJh_F~%9hN%Jn<8T{8_nuKmDdrl@Wr}dEsh%xpJ(24+Oxylt9h5%e1kV?g^0-Qyo1G(JPDe~;OC z_&l<4K6|_byNUQ5vGEl13pzd};`7XXI?nI0^ pZFK&;FQRije)pe1x3z#YUXA|`Z4qdT4UhTmKS^Y^6<-$m{sE12q459! diff --git a/picorv32_firmware/tests/bge.S b/picorv32_firmware/tests/bge.S deleted file mode 100644 index d6aea7c..0000000 --- a/picorv32_firmware/tests/bge.S +++ /dev/null @@ -1,76 +0,0 @@ -# See LICENSE for license details. - -#***************************************************************************** -# bge.S -#----------------------------------------------------------------------------- -# -# Test bge instruction. -# - -#include "riscv_test.h" -#include "test_macros.h" - -RVTEST_RV32U -RVTEST_CODE_BEGIN - - #------------------------------------------------------------- - # Branch tests - #------------------------------------------------------------- - - # Each test checks both forward and backward branches - - TEST_BR2_OP_TAKEN( 2, bge, 0, 0 ); - TEST_BR2_OP_TAKEN( 3, bge, 1, 1 ); - TEST_BR2_OP_TAKEN( 4, bge, -1, -1 ); - TEST_BR2_OP_TAKEN( 5, bge, 1, 0 ); - TEST_BR2_OP_TAKEN( 6, bge, 1, -1 ); - TEST_BR2_OP_TAKEN( 7, bge, -1, -2 ); - - TEST_BR2_OP_NOTTAKEN( 8, bge, 0, 1 ); - TEST_BR2_OP_NOTTAKEN( 9, bge, -1, 1 ); - TEST_BR2_OP_NOTTAKEN( 10, bge, -2, -1 ); - TEST_BR2_OP_NOTTAKEN( 11, bge, -2, 1 ); - - #------------------------------------------------------------- - # Bypassing tests - #------------------------------------------------------------- - - TEST_BR2_SRC12_BYPASS( 12, 0, 0, bge, -1, 0 ); - TEST_BR2_SRC12_BYPASS( 13, 0, 1, bge, -1, 0 ); - TEST_BR2_SRC12_BYPASS( 14, 0, 2, bge, -1, 0 ); - TEST_BR2_SRC12_BYPASS( 15, 1, 0, bge, -1, 0 ); - TEST_BR2_SRC12_BYPASS( 16, 1, 1, bge, -1, 0 ); - TEST_BR2_SRC12_BYPASS( 17, 2, 0, bge, -1, 0 ); - - TEST_BR2_SRC12_BYPASS( 18, 0, 0, bge, -1, 0 ); - TEST_BR2_SRC12_BYPASS( 19, 0, 1, bge, -1, 0 ); - TEST_BR2_SRC12_BYPASS( 20, 0, 2, bge, -1, 0 ); - TEST_BR2_SRC12_BYPASS( 21, 1, 0, bge, -1, 0 ); - TEST_BR2_SRC12_BYPASS( 22, 1, 1, bge, -1, 0 ); - TEST_BR2_SRC12_BYPASS( 23, 2, 0, bge, -1, 0 ); - - #------------------------------------------------------------- - # Test delay slot instructions not executed nor bypassed - #------------------------------------------------------------- - - TEST_CASE( 24, x1, 3, \ - li x1, 1; \ - bge x1, x0, 1f; \ - addi x1, x1, 1; \ - addi x1, x1, 1; \ - addi x1, x1, 1; \ - addi x1, x1, 1; \ -1: addi x1, x1, 1; \ - addi x1, x1, 1; \ - ) - - TEST_PASSFAIL - -RVTEST_CODE_END - - .data -RVTEST_DATA_BEGIN - - TEST_DATA - -RVTEST_DATA_END diff --git a/picorv32_firmware/tests/bge.o b/picorv32_firmware/tests/bge.o deleted file mode 100644 index a66735abf8f560cfae932d7c8dcbe1451a50dcc5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3968 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 lUqE^3yCTpIw?F2)_cW2+R(x6P`w!7yu517R diff --git a/picorv32_firmware/tests/bltu.S b/picorv32_firmware/tests/bltu.S deleted file mode 100644 index 5dcfe7e..0000000 --- a/picorv32_firmware/tests/bltu.S +++ /dev/null @@ -1,73 +0,0 @@ -# See LICENSE for license details. - -#***************************************************************************** -# bltu.S -#----------------------------------------------------------------------------- -# -# Test bltu instruction. -# - -#include "riscv_test.h" -#include "test_macros.h" - -RVTEST_RV32U -RVTEST_CODE_BEGIN - - #------------------------------------------------------------- - # Branch tests - #------------------------------------------------------------- - - # Each test checks both forward and backward branches - - TEST_BR2_OP_TAKEN( 2, bltu, 0x00000000, 0x00000001 ); - TEST_BR2_OP_TAKEN( 3, bltu, 0xfffffffe, 0xffffffff ); - TEST_BR2_OP_TAKEN( 4, bltu, 0x00000000, 0xffffffff ); - - TEST_BR2_OP_NOTTAKEN( 5, bltu, 0x00000001, 0x00000000 ); - TEST_BR2_OP_NOTTAKEN( 6, bltu, 0xffffffff, 0xfffffffe ); - TEST_BR2_OP_NOTTAKEN( 7, bltu, 0xffffffff, 0x00000000 ); - TEST_BR2_OP_NOTTAKEN( 8, bltu, 0x80000000, 0x7fffffff ); - - #------------------------------------------------------------- - # Bypassing tests - #------------------------------------------------------------- - - TEST_BR2_SRC12_BYPASS( 9, 0, 0, bltu, 0xf0000000, 0xefffffff ); - TEST_BR2_SRC12_BYPASS( 10, 0, 1, bltu, 0xf0000000, 0xefffffff ); - TEST_BR2_SRC12_BYPASS( 11, 0, 2, bltu, 0xf0000000, 0xefffffff ); - TEST_BR2_SRC12_BYPASS( 12, 1, 0, bltu, 0xf0000000, 0xefffffff ); - TEST_BR2_SRC12_BYPASS( 13, 1, 1, bltu, 0xf0000000, 0xefffffff ); - TEST_BR2_SRC12_BYPASS( 14, 2, 0, bltu, 0xf0000000, 0xefffffff ); - - TEST_BR2_SRC12_BYPASS( 15, 0, 0, bltu, 0xf0000000, 0xefffffff ); - TEST_BR2_SRC12_BYPASS( 16, 0, 1, bltu, 0xf0000000, 0xefffffff ); - TEST_BR2_SRC12_BYPASS( 17, 0, 2, bltu, 0xf0000000, 0xefffffff ); - TEST_BR2_SRC12_BYPASS( 18, 1, 0, bltu, 0xf0000000, 0xefffffff ); - TEST_BR2_SRC12_BYPASS( 19, 1, 1, bltu, 0xf0000000, 0xefffffff ); - TEST_BR2_SRC12_BYPASS( 20, 2, 0, bltu, 0xf0000000, 0xefffffff ); - - #------------------------------------------------------------- - # Test delay slot instructions not executed nor bypassed - #------------------------------------------------------------- - - TEST_CASE( 21, x1, 3, \ - li x1, 1; \ - bltu x0, x1, 1f; \ - addi x1, x1, 1; \ - addi x1, x1, 1; \ - addi x1, x1, 1; \ - addi x1, x1, 1; \ -1: addi x1, x1, 1; \ - addi x1, x1, 1; \ - ) - - TEST_PASSFAIL - -RVTEST_CODE_END - - .data -RVTEST_DATA_BEGIN - - TEST_DATA - -RVTEST_DATA_END diff --git a/picorv32_firmware/tests/bltu.o b/picorv32_firmware/tests/bltu.o deleted file mode 100644 index 28c9f61a35739f4b5bdf3515985ede3c5ed20ddd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3476 zcmb7GO=w(I6h3b$0*Ss-k8rx@++QcN&yvffbwTlQ#R1kC#u#13Q1Vmlf#efmAD3V1AA_WH(2dp#4=g(uu| zzVDpxo%??7y_pYQ9C^vIEb`5wzv&?(8mrfpUKQG?j%q0tA#x%SN=3=OhL~B5P>cHw za!=6Z%JKb)>HK>vFGk8C&Z}C?r6O{UWm9I`rA$NVbf&Rn-TT9RkZCS;Ik9fk%lnR1 z**EnrQSWeKL+1LR-XZGkPHYr)8~uqgTj(DzSsA<3&i$R(1=K3&UEU9B4W(1MHfw6) zx_IfNt`+E8qC(1|f@A&p@Y;B(Mc0?e2@z{5&{ULW+jX5#0~JFq-HX45xtIT=aqu28 zzq-c)T?6Y@57jB{uGPCvuO4zAg#$Nau;|DYD znD`sz&|B-Fi>`)?QK`Lyef7&aKJ_E5rfSy`)!1-X;Bw^ThP{`B={JYlvy;0m^X~|L%`Pse;IgH@K=Cu3;sIrj^O8k>w?3`q6~Pa z;1|Ki1kZsN1b-iVMeu9jn}UA~PT0TNEOoxL3jP@iBZ7YcJ}>x};LC!41%6xb@4)X1 z{yq4cHE_x-;tx7v7{9L{f#v($1RoalpMj?ZF9XZ>y$wDk>bt;;g8v09zsG&>1yO$h zydroQ@9L)DkAtrXZiBB2-Uwb6ycv8;@Dt#8Ok)}I zRUDN>KAX#r&!jJ9DKR_8aeO8_pAX37<(VugO_JVDzca0Ij}E;$^y$#ALrRAM9R_vq zx=r*XqXS#W&ooD(bO~0f^v*}!p5+liw2j8Q-r+hM$R2lZ3!pTsN z%CPqo_CmeDN#(szpTg|DP`|?Ly--SF_FiZ}`9bCJRGjj7W&}Nvr@P~cR8n`t^C+f! z;As@oUGOaG=L);=xoohVn!^5L# z1=XImk7+!@`QsXoGB%nEj9oa`B!-`#V*Cte^;uw_(0CTX*Ay7H==_HwzreUv=lNW) zPinlx*vz}km=Au~4GjB~g6drGHGC%cnp=$9w5G(kUE?*zrsq0iqxp&Pb6Rtkafilb z#zw!z*l75SvOD2mdl)wV6Jq1NX7qf9_!>TQ{5+p8c0$X~iTo(z(>gyZ@>dym>-?u8 ze}l27^J^l%!I=LE!YU%a$Ji{6IL-(Eeq6@AT7OpLhZ*oK^n4wKC?#3(Er^Ijb=xa#t?p(-VmKIUT2bG?$%D z;|SveYcicrQ(^*#!T&H9TD&SUTSxuYn8)0{g$+20$au)`_+$9p0v&HNzMgCK7`$wm z`z>zz068|lA1^0fI)3?}j(f0i#On%-bsHFbzt3ZEKN|zL6Z8V4tF=U*_)Wllc;tZ2 N#Z8-K#g_%Te*qb|%x3@q diff --git a/picorv32_firmware/tests/bne.S b/picorv32_firmware/tests/bne.S deleted file mode 100644 index 0b33753..0000000 --- a/picorv32_firmware/tests/bne.S +++ /dev/null @@ -1,73 +0,0 @@ -# See LICENSE for license details. - -#***************************************************************************** -# bne.S -#----------------------------------------------------------------------------- -# -# Test bne instruction. -# - -#include "riscv_test.h" -#include "test_macros.h" - -RVTEST_RV32U -RVTEST_CODE_BEGIN - - #------------------------------------------------------------- - # Branch tests - #------------------------------------------------------------- - - # Each test checks both forward and backward branches - - TEST_BR2_OP_TAKEN( 2, bne, 0, 1 ); - TEST_BR2_OP_TAKEN( 3, bne, 1, 0 ); - TEST_BR2_OP_TAKEN( 4, bne, -1, 1 ); - TEST_BR2_OP_TAKEN( 5, bne, 1, -1 ); - - TEST_BR2_OP_NOTTAKEN( 6, bne, 0, 0 ); - TEST_BR2_OP_NOTTAKEN( 7, bne, 1, 1 ); - TEST_BR2_OP_NOTTAKEN( 8, bne, -1, -1 ); - - #------------------------------------------------------------- - # Bypassing tests - #------------------------------------------------------------- - - TEST_BR2_SRC12_BYPASS( 9, 0, 0, bne, 0, 0 ); - TEST_BR2_SRC12_BYPASS( 10, 0, 1, bne, 0, 0 ); - TEST_BR2_SRC12_BYPASS( 11, 0, 2, bne, 0, 0 ); - TEST_BR2_SRC12_BYPASS( 12, 1, 0, bne, 0, 0 ); - TEST_BR2_SRC12_BYPASS( 13, 1, 1, bne, 0, 0 ); - TEST_BR2_SRC12_BYPASS( 14, 2, 0, bne, 0, 0 ); - - TEST_BR2_SRC12_BYPASS( 15, 0, 0, bne, 0, 0 ); - TEST_BR2_SRC12_BYPASS( 16, 0, 1, bne, 0, 0 ); - TEST_BR2_SRC12_BYPASS( 17, 0, 2, bne, 0, 0 ); - TEST_BR2_SRC12_BYPASS( 18, 1, 0, bne, 0, 0 ); - TEST_BR2_SRC12_BYPASS( 19, 1, 1, bne, 0, 0 ); - TEST_BR2_SRC12_BYPASS( 20, 2, 0, bne, 0, 0 ); - - #------------------------------------------------------------- - # Test delay slot instructions not executed nor bypassed - #------------------------------------------------------------- - - TEST_CASE( 21, x1, 3, \ - li x1, 1; \ - bne x1, x0, 1f; \ - addi x1, x1, 1; \ - addi x1, x1, 1; \ - addi x1, x1, 1; \ - addi x1, x1, 1; \ -1: addi x1, x1, 1; \ - addi x1, x1, 1; \ - ) - - TEST_PASSFAIL - -RVTEST_CODE_END - - .data -RVTEST_DATA_BEGIN - - TEST_DATA - -RVTEST_DATA_END diff --git a/picorv32_firmware/tests/bne.o b/picorv32_firmware/tests/bne.o deleted file mode 100644 index cc45986290ff1aea86c9958a54cee0eea7e894b7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3456 zcmb7`PiP!f9LImN+11$? zh=m3kq-cee4H9c80dpwWLqIKpJuDa@2az6H5b0r|Q9R_ZXbv8v@%wx4&E%Ix55Dl; z`+R@D@BC)o%-fk}!}aABL#S zxr^Adbh+BPH#L`~Qm7K(n2JXoD&hE;WmD!;hceCOo=juedVI@yl4&US#G(o0ZRE+z zcZ+;?ESf^Tx+jkB6#33rbleyoiyi1{biiLp=@QE%58l9STtvj#kG04 z=JE-hTQuiIT`$*CZq>OW#R9Znx9A*?1?s63aOiR48>qW>ARoi}Gq;>(-_yXJjYA&g zyXiFfzIyhR_kHRF-gr>@D__j%W|;?(&bRV#7GW7Ze;eX3UKpwFvUbb`{y`z>=5 z&u`KG_l`Y@ePv~q?_1cfHQ4iZDKs98g`H3-Tn)x**RZ$0LI1(@hi3kj@~Ex-@P#*m zrLgoq^LvIS* z2)!kA3v@;3lhE5jcR~LxbR1f3QWdkP4?4mzqfdiR37rCu3w;*6AoMx#s?g`bn?hd% z?+Bd%N5u1b8#*EMyU-Ve=5t*U`YQCg&>uiQ68d9kui04WCkHe#@j^CVn3zjn%2GTx z&-27wcA?;l>C5;^Do>K$Ousd&xmQnpdg|BHfSv~RG^D3tJ-G=pyJk+B*;H~(Dc96; zO)=M0b4@wd)JvLrNtbfze4gTC$$*QoSBM>jC2m`67-q{d-2Vr?99`TUsl>0EsdtV;#CCUUwE7NwLff+exSiufNA z^ojXw!Fy)SL63-f4RYw1iSy*eZLl5IrWQ;`@&6CEGwAm73Ms{0r+I|=xaLvjR?TC~ z#>4MJ+tKk!W)q)gKB40?%qKO^G8@ko<~AK)6!9hIb{)UY+@bjfvpIH^nLh?-Yv^8l zow*YO+HG{ZOCjB1Hpkv$?$+@#^NX4{nT=ix4e>z4 zE6nX_bwIEQ-j&Hq} ze%i-1xbckJ;y3nH(D{1LpmRNb4?KhJ)dJFmTB6UqBG4WleaaWXMVsx$hxxvL04)8E A`2YX_ diff --git a/picorv32_firmware/tests/div.S.ignore b/picorv32_firmware/tests/div.S.ignore deleted file mode 100644 index 24dc9ff..0000000 --- a/picorv32_firmware/tests/div.S.ignore +++ /dev/null @@ -1,41 +0,0 @@ -# See LICENSE for license details. - -#***************************************************************************** -# div.S -#----------------------------------------------------------------------------- -# -# Test div instruction. -# - -#include "riscv_test.h" -#include "test_macros.h" - -RVTEST_RV32U -RVTEST_CODE_BEGIN - - #------------------------------------------------------------- - # Arithmetic tests - #------------------------------------------------------------- - - TEST_RR_OP( 2, div, 3, 20, 6 ); - TEST_RR_OP( 3, div, -3, -20, 6 ); - TEST_RR_OP( 4, div, -3, 20, -6 ); - TEST_RR_OP( 5, div, 3, -20, -6 ); - - TEST_RR_OP( 6, div, -1<<31, -1<<31, 1 ); - TEST_RR_OP( 7, div, -1<<31, -1<<31, -1 ); - - TEST_RR_OP( 8, div, -1, -1<<31, 0 ); - TEST_RR_OP( 9, div, -1, 1, 0 ); - TEST_RR_OP(10, div, -1, 0, 0 ); - - TEST_PASSFAIL - -RVTEST_CODE_END - - .data -RVTEST_DATA_BEGIN - - TEST_DATA - -RVTEST_DATA_END diff --git a/picorv32_firmware/tests/divu.S.ignore b/picorv32_firmware/tests/divu.S.ignore deleted file mode 100644 index cd348c9..0000000 --- a/picorv32_firmware/tests/divu.S.ignore +++ /dev/null @@ -1,41 +0,0 @@ -# See LICENSE for license details. - -#***************************************************************************** -# divu.S -#----------------------------------------------------------------------------- -# -# Test divu instruction. -# - -#include "riscv_test.h" -#include "test_macros.h" - -RVTEST_RV32U -RVTEST_CODE_BEGIN - - #------------------------------------------------------------- - # Arithmetic tests - #------------------------------------------------------------- - - TEST_RR_OP( 2, divu, 3, 20, 6 ); - TEST_RR_OP( 3, divu, 715827879, -20, 6 ); - TEST_RR_OP( 4, divu, 0, 20, -6 ); - TEST_RR_OP( 5, divu, 0, -20, -6 ); - - TEST_RR_OP( 6, divu, -1<<31, -1<<31, 1 ); - TEST_RR_OP( 7, divu, 0, -1<<31, -1 ); - - TEST_RR_OP( 8, divu, -1, -1<<31, 0 ); - TEST_RR_OP( 9, divu, -1, 1, 0 ); - TEST_RR_OP(10, divu, -1, 0, 0 ); - - TEST_PASSFAIL - -RVTEST_CODE_END - - .data -RVTEST_DATA_BEGIN - - TEST_DATA - -RVTEST_DATA_END diff --git a/picorv32_firmware/tests/j.S b/picorv32_firmware/tests/j.S deleted file mode 100644 index 259a236..0000000 --- a/picorv32_firmware/tests/j.S +++ /dev/null @@ -1,49 +0,0 @@ -# See LICENSE for license details. - -#***************************************************************************** -# j.S -#----------------------------------------------------------------------------- -# -# Test j instruction. -# - -#include "riscv_test.h" -#include "test_macros.h" - -RVTEST_RV32U -RVTEST_CODE_BEGIN - - #------------------------------------------------------------- - # Test basic - #------------------------------------------------------------- - - li TESTNUM, 2; - j test_2; - j fail; -test_2: - - #------------------------------------------------------------- - # Test delay slot instructions not executed nor bypassed - #------------------------------------------------------------- - - TEST_CASE( 3, x1, 3, \ - li x1, 1; \ - j 1f; \ - addi x1, x1, 1; \ - addi x1, x1, 1; \ - addi x1, x1, 1; \ - addi x1, x1, 1; \ -1: addi x1, x1, 1; \ - addi x1, x1, 1; \ - ) - - TEST_PASSFAIL - -RVTEST_CODE_END - - .data -RVTEST_DATA_BEGIN - - TEST_DATA - -RVTEST_DATA_END diff --git a/picorv32_firmware/tests/j.o b/picorv32_firmware/tests/j.o deleted file mode 100644 index 28de446d136ce6176ad06f4ff8109e45a35dae8c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1056 zcmb7DJ#Q015Pj?WaQKSOvM5L*aS{kozzHWv0SO@&kje!Gy>+n<1xh`zX#No!L%m1D!&+Gj9q%$D-j8*ayP<- zzW4x5dhg&w^_ISQJS!@L7k)F0gEE}?&H6{y{6zn5{M6tN8M@k2-tEIL z+vi2-o$DO%_;byJUn$~wQsFAOxHg3wB)4ry^&RpjPJEwy=)|jktv_ab=&U~_f9b@} z<{a!+VdGrPAStrE=#J9u49U(!ush1$6!V}z9%ZOBt9X^Z9%{aZoixvpbXv6*1{icF zSy5G9^3M)fGgMN`CNE&~5qT79(F&o#IT4fDY1AuYSX*B=< diff --git a/picorv32_firmware/tests/jal.S b/picorv32_firmware/tests/jal.S deleted file mode 100644 index 742abac..0000000 --- a/picorv32_firmware/tests/jal.S +++ /dev/null @@ -1,60 +0,0 @@ -# See LICENSE for license details. - -#***************************************************************************** -# jal.S -#----------------------------------------------------------------------------- -# -# Test jal instruction. -# - -#include "riscv_test.h" -#include "test_macros.h" - -RVTEST_RV32U -RVTEST_CODE_BEGIN - - #------------------------------------------------------------- - # Test 2: Basic test - #------------------------------------------------------------- - -test_2: - li TESTNUM, 2 - li ra, 0 - -linkaddr_2: - jal target_2 - nop - nop - - j fail - -target_2: - la x2, linkaddr_2 - addi x2, x2, 4 - bne x2, ra, fail - - #------------------------------------------------------------- - # Test delay slot instructions not executed nor bypassed - #------------------------------------------------------------- - - TEST_CASE( 3, x2, 3, \ - li x2, 1; \ - jal 1f; \ - addi x2, x2, 1; \ - addi x2, x2, 1; \ - addi x2, x2, 1; \ - addi x2, x2, 1; \ -1: addi x2, x2, 1; \ - addi x2, x2, 1; \ - ) - - TEST_PASSFAIL - -RVTEST_CODE_END - - .data -RVTEST_DATA_BEGIN - - TEST_DATA - -RVTEST_DATA_END diff --git a/picorv32_firmware/tests/jal.o b/picorv32_firmware/tests/jal.o deleted file mode 100644 index 7e511c2b48ad1b1b7e91bbac1c4d77b9d6456450..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1224 zcmb7DO=}ZT6g@AQnO3QBhEb|*!2v~FXh>S2E>qCrB7#Uk7fN_drW#F?Fqws}6m${X z&L8k6xKUiXapy*`;7&KLE&2oW+?jdt73sno?%Z?EJMUv|-aNh5-c(A#gu*ZUWx%vr zj9kvk1n;$wF4jHx&sn=KU7U^HQag#!{+Zto^#Gasts+{k*CJ$`{{v7VtKlWW2o?3j9_>RSI5WlndEn<8AZSt`-es6}s?kMO3oTQ${le9C` zyD{qHL~3UkKTc<)HyXysJ*yb>hmUlxmvmN<>g0Z$671;ypcr4nSWhOXw;K^3%}Nt; zNtm4^PR+JUjzPd$2}N2ibty)d_gb7UOoENxCO&nn&;=XaC-%KUUttM&hb5%P!I2!| zs^Fsq-eU1fd{^{Zp+B?q7lO+__%m@Jn@H3rPj*wi&6*}fePB=$4>a2s_QK?LN$B srb*>ivykQ&99uMZw@97jwz@}I0Q5pPIWsw(Y}H8LbK84*8|k(sP`KOonyW@KC85wvyEUf%Nd zRM_g!9%o*-)Kx84ka$caKyx4K{WI){4-ZFMYPsw5_c&@&zg7Ce&y|$_I{fivM~?Tj zzb(DB^;=^jey%3Ii+(BeNTtv(CH2kyVc(sQ*e%G*$-{5_-0Uh3*HXTz{?NcTLEn)N zd;{-fKQr)phu_5FS-;_rw{g$IJ%42I{&EXa|LLhypX#TuXI`9{P5aqGCeALW{h_156WE7Y~ha(#R zb{Goxc3^!5C_1tW^EZSl9NB}sKVhuz1FjAZk|PJe8&>@gaL?l30!J1Pffp@)0{DT& z+rUpPeirzDi(dq8SnGcezSpXg+xJi2vg%iWZ(E%8s}{co{HMiPU$S@%ylipS|FZZ^ z;7#w{pL!_D-6NI(W6xyq!=~3(cFA^rYXgR4)ff6^IS9_ zjrM#~lxJF^uyec_%}q<|l{z%Guj;g0r#(8&$U@ldO7UQ+ zfN9z-t9e?@70hL~s%GkCmwMT)i28_dn(H)^gE5s}`B9YwQrej4Oh)Ik4%TQBvC(V5 zd0*?qM(0@whP6&?^zVT4lUgS>I?qZls&!(cF97G)X`R^Ue3rp_trHvlN8o&*bz-A0 z0S9@l6C3?k;5=VW1hLV17J@0N`dk?OIe31fl7-mlJZr%wtrHtP4V?c{>%>O)AbDA> z^RjXL4`9qt!n5Pb}D?GxfHm=OPB82vSI0TW^;?#<{W z;t8$yfXBCLEXD5mGf{XHIqK+q!k|vG72=iP3(yFoP>M%!L_Z@6@M0-RwnTj!7bzr> z97*BU6W0>`0Z7#q;r7wa+9<~Mgqtt*Z&ojql#h8Q29NcpeC9G{EHeo9D?#A>eucqx e`Am7_O)o%s1@b#V5~klcxb1t6MrC6{HokYsw$}v! diff --git a/picorv32_firmware/tests/lb.S b/picorv32_firmware/tests/lb.S deleted file mode 100644 index eaf7902..0000000 --- a/picorv32_firmware/tests/lb.S +++ /dev/null @@ -1,92 +0,0 @@ -# See LICENSE for license details. - -#***************************************************************************** -# lb.S -#----------------------------------------------------------------------------- -# -# Test lb instruction. -# - -#include "riscv_test.h" -#include "test_macros.h" - -RVTEST_RV32U -RVTEST_CODE_BEGIN - - #------------------------------------------------------------- - # Basic tests - #------------------------------------------------------------- - - TEST_LD_OP( 2, lb, 0xffffffff, 0, tdat ); - TEST_LD_OP( 3, lb, 0x00000000, 1, tdat ); - TEST_LD_OP( 4, lb, 0xfffffff0, 2, tdat ); - TEST_LD_OP( 5, lb, 0x0000000f, 3, tdat ); - - # Test with negative offset - - TEST_LD_OP( 6, lb, 0xffffffff, -3, tdat4 ); - TEST_LD_OP( 7, lb, 0x00000000, -2, tdat4 ); - TEST_LD_OP( 8, lb, 0xfffffff0, -1, tdat4 ); - TEST_LD_OP( 9, lb, 0x0000000f, 0, tdat4 ); - - # Test with a negative base - - TEST_CASE( 10, x3, 0xffffffff, \ - la x1, tdat; \ - addi x1, x1, -32; \ - lb x3, 32(x1); \ - ) - - # Test with unaligned base - - TEST_CASE( 11, x3, 0x00000000, \ - la x1, tdat; \ - addi x1, x1, -6; \ - lb x3, 7(x1); \ - ) - - #------------------------------------------------------------- - # Bypassing tests - #------------------------------------------------------------- - - TEST_LD_DEST_BYPASS( 12, 0, lb, 0xfffffff0, 1, tdat2 ); - TEST_LD_DEST_BYPASS( 13, 1, lb, 0x0000000f, 1, tdat3 ); - TEST_LD_DEST_BYPASS( 14, 2, lb, 0x00000000, 1, tdat1 ); - - TEST_LD_SRC1_BYPASS( 15, 0, lb, 0xfffffff0, 1, tdat2 ); - TEST_LD_SRC1_BYPASS( 16, 1, lb, 0x0000000f, 1, tdat3 ); - TEST_LD_SRC1_BYPASS( 17, 2, lb, 0x00000000, 1, tdat1 ); - - #------------------------------------------------------------- - # Test write-after-write hazard - #------------------------------------------------------------- - - TEST_CASE( 18, x2, 2, \ - la x3, tdat; \ - lb x2, 0(x3); \ - li x2, 2; \ - ) - - TEST_CASE( 19, x2, 2, \ - la x3, tdat; \ - lb x2, 0(x3); \ - nop; \ - li x2, 2; \ - ) - - TEST_PASSFAIL - -RVTEST_CODE_END - - .data -RVTEST_DATA_BEGIN - - TEST_DATA - -tdat: -tdat1: .byte 0xff -tdat2: .byte 0x00 -tdat3: .byte 0xf0 -tdat4: .byte 0x0f - -RVTEST_DATA_END diff --git a/picorv32_firmware/tests/lb.o b/picorv32_firmware/tests/lb.o deleted file mode 100644 index bd1173ac90c8144683e73d4c92c9c573e0a8211b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3584 zcmb7`O=w(I7>2()KWU0F-t;!iG^uuKYOPwwnfx>fh;-44i!4g*LZQ%1Ch-T-G$eyW zD4Gy)Az2Jev84zG>7t7+x=`uD#Vjgx;UYr}h;$JU#YGo`x^Phv-}j#T-T6Azg=e_u zJl}iX`OeSWd+vOEdg67@^F)g$e@ZJ7sdu@a;jlR-ow7$p(;`7SEu$Ucuc9q~mX?9s zx6pd!QuEO6?373?y`7-O>ngrmTNYVeLEGKj4Z3qu{-QC^(tYU2*a}Ir z!5R{7jCCnrZ)941>$|Hf^U*qPbNt?*yDmXO%=&!^R=sdd<%63+kk}`+L{5J3&+Y`> z8;^UjZ_eM8^8U@9*#FGghe7xDzx(6wh?M&_pNzkAkl(?cwatg?FMr;6BKGa$T*R}! z06AAz_#0s!)yCe~8_wH*%-ix~4%Zs#*pGQ%#m!Y)@g#{W@c8@Yu+KTKyuXorq>t-} z`wQ&%%6;`D?mfSjK9dSMa_L$}GZpMv$36B9uJ5C3D{6n0Me%vB!Vh1^?NqJ9dbe<| ze!00T&8INbf0pDUPlHGjA6t@=3LUvv^n{O0^w@wrIe_|z=|2iCnE2(G2}v15eHp)# zE1rx3-p~;FUIR~>_%wLQ#1r7EiQfdbW}TF`5#KcZli<3E-v$3<;yG~B#2e`5N-Lfk6JaISYu|7~<`oA?gmt~j9=uH{t| z-$VafCf-1N%fwrV3%FeIgt6Uk#*?lSwd=S0&HidzzujN<*W3E-{<6Q>)^GQh{ROjL z#^>AOwYIq47XRKB?{8bb-7n_1`}K3%_}gvc|AyF({{XQa{}04={J#;~@plkw@v*<= zb%ZAvC106YtX!BYU7V5p`~uqxb2CeoIGDaPHzT2EP%6`Lf7S^@t{HaCh-*%S zu1Fho+L&v`T~jPXZ82(HV$_^T5m_-zl)H#Th}0R4QN$pjH_Bg(1}Kipd}(n}@)Ly| zs$!xT)`MX^6xPFGJrdR@1aH&XsS67;m2ivtQo2(jLlIKyk90Pw^PbLhIuluSzRR;Y zr;}CZJ+FSU>O4=fhf$%BRi6Z_pRD>cIQuLr6te1kX4Fqs{W3T^fC`1IdKH|(dz*!< zI?s>n5vmfNC93n8Q$JbtTj1<-s8GnN*TL#1t9}=pJ&Fp2tU8}r^^;Y<56(W13WcnC z6RhhctNs@_dkhr{S#>`1>L;u2gR?J$b|I_IGa=LKbh7Hh^uOqIvg$lDG8w0nRiC8) zC8v{B=QEw*%L|39dX@g;PA99*XI|$+R{bvh(Myi3I?n{14_WmG^ygiEvg$lDbUtL& zv*7G2&QDgIXPWLOS@o0j7o4B0I?p`ylT|-Yf6@8Ls{4@q4yPYP(}VxTET?e!dqb4- zhAW2G4Bs&Po#7u1KQP>hJ<5hGlcNRPH2T-%Vdvj4`hD_<(;phW z6Z_zwaQbm_wB9i?|FEE(GkV4F68Vtx+ynQFJC^+7hZifQDYTUZ*S@E;Ff&`iYk-G7 z&f1dXr*MY;kCKBI)0gPy5-#-zjIAXVK|fmZ$tb?H2mdu7@TcYX+1G`O#{=W|e-%J; zK#rM@NvH9p;xEwUa%gL&BlNA~;(W(&F*olwZnI5s0|wp?S`>TQd~29=bPI=8_5A~3 C+L!tO diff --git a/picorv32_firmware/tests/lbu.S b/picorv32_firmware/tests/lbu.S deleted file mode 100644 index 027b643..0000000 --- a/picorv32_firmware/tests/lbu.S +++ /dev/null @@ -1,92 +0,0 @@ -# See LICENSE for license details. - -#***************************************************************************** -# lbu.S -#----------------------------------------------------------------------------- -# -# Test lbu instruction. -# - -#include "riscv_test.h" -#include "test_macros.h" - -RVTEST_RV32U -RVTEST_CODE_BEGIN - - #------------------------------------------------------------- - # Basic tests - #------------------------------------------------------------- - - TEST_LD_OP( 2, lbu, 0x000000ff, 0, tdat ); - TEST_LD_OP( 3, lbu, 0x00000000, 1, tdat ); - TEST_LD_OP( 4, lbu, 0x000000f0, 2, tdat ); - TEST_LD_OP( 5, lbu, 0x0000000f, 3, tdat ); - - # Test with negative offset - - TEST_LD_OP( 6, lbu, 0x000000ff, -3, tdat4 ); - TEST_LD_OP( 7, lbu, 0x00000000, -2, tdat4 ); - TEST_LD_OP( 8, lbu, 0x000000f0, -1, tdat4 ); - TEST_LD_OP( 9, lbu, 0x0000000f, 0, tdat4 ); - - # Test with a negative base - - TEST_CASE( 10, x3, 0x000000ff, \ - la x1, tdat; \ - addi x1, x1, -32; \ - lbu x3, 32(x1); \ - ) - - # Test with unaligned base - - TEST_CASE( 11, x3, 0x00000000, \ - la x1, tdat; \ - addi x1, x1, -6; \ - lbu x3, 7(x1); \ - ) - - #------------------------------------------------------------- - # Bypassing tests - #------------------------------------------------------------- - - TEST_LD_DEST_BYPASS( 12, 0, lbu, 0x000000f0, 1, tdat2 ); - TEST_LD_DEST_BYPASS( 13, 1, lbu, 0x0000000f, 1, tdat3 ); - TEST_LD_DEST_BYPASS( 14, 2, lbu, 0x00000000, 1, tdat1 ); - - TEST_LD_SRC1_BYPASS( 15, 0, lbu, 0x000000f0, 1, tdat2 ); - TEST_LD_SRC1_BYPASS( 16, 1, lbu, 0x0000000f, 1, tdat3 ); - TEST_LD_SRC1_BYPASS( 17, 2, lbu, 0x00000000, 1, tdat1 ); - - #------------------------------------------------------------- - # Test write-after-write hazard - #------------------------------------------------------------- - - TEST_CASE( 18, x2, 2, \ - la x3, tdat; \ - lbu x2, 0(x3); \ - li x2, 2; \ - ) - - TEST_CASE( 19, x2, 2, \ - la x3, tdat; \ - lbu x2, 0(x3); \ - nop; \ - li x2, 2; \ - ) - - TEST_PASSFAIL - -RVTEST_CODE_END - - .data -RVTEST_DATA_BEGIN - - TEST_DATA - -tdat: -tdat1: .byte 0xff -tdat2: .byte 0x00 -tdat3: .byte 0xf0 -tdat4: .byte 0x0f - -RVTEST_DATA_END diff --git a/picorv32_firmware/tests/lbu.o b/picorv32_firmware/tests/lbu.o deleted file mode 100644 index 2fefcd164b337988cfec950867dd0ba09d074197..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3588 zcmb7GO=w(I82#S-HPx8D^d-!+jdp5cty;&KBu!cn$)Xh(U4+_&LLiw=;}5iHNJgnp zG!k(kT?|aIr3eP;qKhuFQ0c-&0u{P&ks$^|x(JBkB8x#?xG0V1y!*a4U#Gh88{WO= zoO|APf8M+I%||CrzUq0NXn69cw3x`9PS-LVR)?fRcF1U2BuJ-aG$Z~Z>dI$n>Cb-) ztyeBI_ivv&^Pbexn+a;XuHxSMg2>`3>aOOlperwxFB<(V-G`2xT}7$Xte&S1|Cm&+ zG!C@x{r3i4D-tBc%-@$_(F^BP>01wi#BQl4^74y+>Os)8 z_NW)@=KM{m^sINs{-;je54tx0-5=j0QrWxyM0`&l@4=e2jfeBEeBO9G_U-0a#IwEt zITu&?j4+N`V`uCQ$L&AjZTT^VYmId5$GETJ<*I+|NpjVbz~l4HW1aI}rKgd6sEzZ8 z+ly@XDtlLwc=!BzdOQ_m^67e}nF@9+;T`)1*Z0x25!JuSy!d=q;fF7?oT_K6cLVS0 zm+RZo+=Z_GGm;PO29YFwHj2K{;UB4+0kre=)`cNf|_W3D3!e zC!+wbDMh|lfTs*U0esQ$lfX5@Uk7fDIw^00-!$!0z$=Eo4g8bgGr-v{oD4+&2` z1V3c>r{FO~&zHeZ$ATwUz~kwm{W|z3ru{4MRwTo*-Zt&aXxudXHh5>8&?Rqi4U9X?p`rmBp|2J^k{}#CI{||86|KH%Y{|De2KGru8k5#aP z5ryjXe06fBe12LAvvaH`XQnS!V{-Pw%(R4_L8+cCSLLnpyXTxRs;9dXr2=!&#a zryX_GF;|s}QC*5^ml!2SQbJaA6Xh-;5turoK1%2$^hWthQ3s`CGFzUXm%_L*tHEO72=6bNF~xo^}@tokM3Tt5l~vFbJ8EWX_gV%2$u zqJ=<2WvVX9#7& z;Htrw4ZdOUcLx7x@Rq?HSQE`ZVDNE+$BFr80#P;k0&z5fn@0bdc-Z;ZjDC;!h|}*I zy#wpuk2w7>aWvnf#Qf8OIBoQ*!54}5JI`IJR8!BNc&tsENlSzPtnfHz4rQ@_x2;;^Of@9{;xj z&>WCs%x%(Pe5v>bx?B#e&2WUiC0rcuQC!T;_l?VJQ`~^zF%BdOh27xRSHqyAS2%R4 F?;o#amskJ* diff --git a/picorv32_firmware/tests/lh.S b/picorv32_firmware/tests/lh.S deleted file mode 100644 index d8eda91..0000000 --- a/picorv32_firmware/tests/lh.S +++ /dev/null @@ -1,92 +0,0 @@ -# See LICENSE for license details. - -#***************************************************************************** -# lh.S -#----------------------------------------------------------------------------- -# -# Test lh instruction. -# - -#include "riscv_test.h" -#include "test_macros.h" - -RVTEST_RV32U -RVTEST_CODE_BEGIN - - #------------------------------------------------------------- - # Basic tests - #------------------------------------------------------------- - - TEST_LD_OP( 2, lh, 0x000000ff, 0, tdat ); - TEST_LD_OP( 3, lh, 0xffffff00, 2, tdat ); - TEST_LD_OP( 4, lh, 0x00000ff0, 4, tdat ); - TEST_LD_OP( 5, lh, 0xfffff00f, 6, tdat ); - - # Test with negative offset - - TEST_LD_OP( 6, lh, 0x000000ff, -6, tdat4 ); - TEST_LD_OP( 7, lh, 0xffffff00, -4, tdat4 ); - TEST_LD_OP( 8, lh, 0x00000ff0, -2, tdat4 ); - TEST_LD_OP( 9, lh, 0xfffff00f, 0, tdat4 ); - - # Test with a negative base - - TEST_CASE( 10, x3, 0x000000ff, \ - la x1, tdat; \ - addi x1, x1, -32; \ - lh x3, 32(x1); \ - ) - - # Test with unaligned base - - TEST_CASE( 11, x3, 0xffffff00, \ - la x1, tdat; \ - addi x1, x1, -5; \ - lh x3, 7(x1); \ - ) - - #------------------------------------------------------------- - # Bypassing tests - #------------------------------------------------------------- - - TEST_LD_DEST_BYPASS( 12, 0, lh, 0x00000ff0, 2, tdat2 ); - TEST_LD_DEST_BYPASS( 13, 1, lh, 0xfffff00f, 2, tdat3 ); - TEST_LD_DEST_BYPASS( 14, 2, lh, 0xffffff00, 2, tdat1 ); - - TEST_LD_SRC1_BYPASS( 15, 0, lh, 0x00000ff0, 2, tdat2 ); - TEST_LD_SRC1_BYPASS( 16, 1, lh, 0xfffff00f, 2, tdat3 ); - TEST_LD_SRC1_BYPASS( 17, 2, lh, 0xffffff00, 2, tdat1 ); - - #------------------------------------------------------------- - # Test write-after-write hazard - #------------------------------------------------------------- - - TEST_CASE( 18, x2, 2, \ - la x3, tdat; \ - lh x2, 0(x3); \ - li x2, 2; \ - ) - - TEST_CASE( 19, x2, 2, \ - la x3, tdat; \ - lh x2, 0(x3); \ - nop; \ - li x2, 2; \ - ) - - TEST_PASSFAIL - -RVTEST_CODE_END - - .data -RVTEST_DATA_BEGIN - - TEST_DATA - -tdat: -tdat1: .half 0x00ff -tdat2: .half 0xff00 -tdat3: .half 0x0ff0 -tdat4: .half 0xf00f - -RVTEST_DATA_END diff --git a/picorv32_firmware/tests/lh.o b/picorv32_firmware/tests/lh.o deleted file mode 100644 index e4c99bd27507ff6c194990aad1389b67d0500e61..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3620 zcmb7GO=w(I82w)6rzzIyq|cIR6Ps7l)~GdR+N4Q0l0_>nvM6;^q0pI5q7l+GB!g5a z8VR_NQW_`FAVGt4(S?gF)Vj<%pkzVFS~i7x!Yz4x4R z&;8B4_su8gN8a*0Pc%IFTN+GcYoDv>4~rgYl|3?;67f?h8B9xd4rS@{lynC_KszYc zYhCq;agj=DvxOSdU9_#tip=p1K?YRC1Ljy!t)**3LZZFE1d zf6v9Lko40*s*mv2q{{1x!_n(n?=EjI5@Mj|-$>rv3zQ zpW&~^m>?mikT2mZx$tBV;BBSo?@i!>;pc&G8a@KNX!tw8>6j4Syea z%kW9!_~G#6L(opcKL#H%{4?-)`dH5`@NrYW0G>p0k&rI|mQ4LOS{0TFxsP())N}6J zhW`kDG9J*ARq)G(b8R;aUk6_^d;{G6KgjKVlNXR&ctURXo80aOUV1kUuL^ z#hDrD9q9{@|8vFf~&>L*rx4LElK8G=~#EnxK% ztNs``_cAgBvFg0jx?W<{lfb#2&@RNP^UkZESoMJZSDc?%^yN=sKe8%Y`M!!VNA1sKn(H9I}B<^ya$G~l89hTmikFJ%AS5cOy zT{*63dTgSI&j25NytPH?y^1&Ve?$N;mJYrY>i|DI#3c1M|^#c$R-5-YuTQ4 z`;hoNkSCBB0YIyRVXpo0now6?kAld{J{T;`bcDWTBp$CJB=*Pi#$#o>cnCwQc7i&E QZB4!vOgcKksA>5A0gZLB$p8QV diff --git a/picorv32_firmware/tests/lhu.S b/picorv32_firmware/tests/lhu.S deleted file mode 100644 index 71daec6..0000000 --- a/picorv32_firmware/tests/lhu.S +++ /dev/null @@ -1,92 +0,0 @@ -# See LICENSE for license details. - -#***************************************************************************** -# lhu.S -#----------------------------------------------------------------------------- -# -# Test lhu instruction. -# - -#include "riscv_test.h" -#include "test_macros.h" - -RVTEST_RV32U -RVTEST_CODE_BEGIN - - #------------------------------------------------------------- - # Basic tests - #------------------------------------------------------------- - - TEST_LD_OP( 2, lhu, 0x000000ff, 0, tdat ); - TEST_LD_OP( 3, lhu, 0x0000ff00, 2, tdat ); - TEST_LD_OP( 4, lhu, 0x00000ff0, 4, tdat ); - TEST_LD_OP( 5, lhu, 0x0000f00f, 6, tdat ); - - # Test with negative offset - - TEST_LD_OP( 6, lhu, 0x000000ff, -6, tdat4 ); - TEST_LD_OP( 7, lhu, 0x0000ff00, -4, tdat4 ); - TEST_LD_OP( 8, lhu, 0x00000ff0, -2, tdat4 ); - TEST_LD_OP( 9, lhu, 0x0000f00f, 0, tdat4 ); - - # Test with a negative base - - TEST_CASE( 10, x3, 0x000000ff, \ - la x1, tdat; \ - addi x1, x1, -32; \ - lhu x3, 32(x1); \ - ) - - # Test with unaligned base - - TEST_CASE( 11, x3, 0x0000ff00, \ - la x1, tdat; \ - addi x1, x1, -5; \ - lhu x3, 7(x1); \ - ) - - #------------------------------------------------------------- - # Bypassing tests - #------------------------------------------------------------- - - TEST_LD_DEST_BYPASS( 12, 0, lhu, 0x00000ff0, 2, tdat2 ); - TEST_LD_DEST_BYPASS( 13, 1, lhu, 0x0000f00f, 2, tdat3 ); - TEST_LD_DEST_BYPASS( 14, 2, lhu, 0x0000ff00, 2, tdat1 ); - - TEST_LD_SRC1_BYPASS( 15, 0, lhu, 0x00000ff0, 2, tdat2 ); - TEST_LD_SRC1_BYPASS( 16, 1, lhu, 0x0000f00f, 2, tdat3 ); - TEST_LD_SRC1_BYPASS( 17, 2, lhu, 0x0000ff00, 2, tdat1 ); - - #------------------------------------------------------------- - # Test write-after-write hazard - #------------------------------------------------------------- - - TEST_CASE( 18, x2, 2, \ - la x3, tdat; \ - lhu x2, 0(x3); \ - li x2, 2; \ - ) - - TEST_CASE( 19, x2, 2, \ - la x3, tdat; \ - lhu x2, 0(x3); \ - nop; \ - li x2, 2; \ - ) - - TEST_PASSFAIL - -RVTEST_CODE_END - - .data -RVTEST_DATA_BEGIN - - TEST_DATA - -tdat: -tdat1: .half 0x00ff -tdat2: .half 0xff00 -tdat3: .half 0x0ff0 -tdat4: .half 0xf00f - -RVTEST_DATA_END diff --git a/picorv32_firmware/tests/lhu.o b/picorv32_firmware/tests/lhu.o deleted file mode 100644 index 9e7f09921949fc0307e37bf575c7032f0e786b77..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3644 zcmb7GO>9(E82#S-l%maa>H}x^5gr19inRlULPAUzU|4iPaOJ8UUaOdt(zK(|gy@(W zV+=g1isJkPr*+a{v~+2eC+26c+Irm0M8-2l$BcmcTD@Y+7#DW zxr2Juv^T-~(g{5I3H+qt%iyzy-v_^9IQP10_#<%p{~)*VCb#h>uOqwU3Av3oxs5Nm zjW4;4FS(5`xs5ORnAt!1HmFlb2?uB=#JZ+GMpR z?^QpTcES-?4ZG^7tB%F4L>qD1aaWyiRb?otD@pAJM#+^_Fe;`=#;#x>Fm)z#R4_^G zO~$Vz6I4#fY;}HK2FHd16qQURE)U1$k+>X=%cF65O!yT>9-o`4B~jYmxjb?t(J1Xm zbXKbKT$g&CiCFbv;Bw$}V%2%>)laPY7;t$H3M69HCxO*ZtojAu^2;cYh*hrxtDji) zFM!K?Q6Lek&U;lVP<3}q^(FA~KB^*1$g1<+sh?PNz7gg9D3FL%=e<-vvFg77m-$d5 z5v$I#t$t$FTfpT5D3FL%=e^eb606<^Ts|1vg;;god-W5mevtlGou62Bz6+(TPA69V zEd8%Jomh3g8>N!diB+%D|GLwORp-4f@dJiLtomL04>_G!^)>pF^$@H6g#P41N31&E z1ziuZ>Sf^apc|i9b-o+A9%9wc(Eq0M6RXa5P2)+ddX4@e=O6xn!&zsEJ1t zzP1U!7a;Io%l>TZL+0~9u0sq1^nz>B@pw(BtM8G=KuEjYNC diff --git a/picorv32_firmware/tests/lui.S b/picorv32_firmware/tests/lui.S deleted file mode 100644 index 50822d1..0000000 --- a/picorv32_firmware/tests/lui.S +++ /dev/null @@ -1,36 +0,0 @@ -# See LICENSE for license details. - -#***************************************************************************** -# lui.S -#----------------------------------------------------------------------------- -# -# Test lui instruction. -# - -#include "riscv_test.h" -#include "test_macros.h" - -RVTEST_RV32U -RVTEST_CODE_BEGIN - - #------------------------------------------------------------- - # Basic tests - #------------------------------------------------------------- - - TEST_CASE( 2, x1, 0x00000000, lui x1, 0x00000 ); - TEST_CASE( 3, x1, 0xfffff800, lui x1, 0xfffff;sra x1,x1,1); - TEST_CASE( 4, x1, 0x000007ff, lui x1, 0x7ffff;sra x1,x1,20); - TEST_CASE( 5, x1, 0xfffff800, lui x1, 0x80000;sra x1,x1,20); - - TEST_CASE( 6, x0, 0, lui x0, 0x80000 ); - - TEST_PASSFAIL - -RVTEST_CODE_END - - .data -RVTEST_DATA_BEGIN - - TEST_DATA - -RVTEST_DATA_END diff --git a/picorv32_firmware/tests/lui.o b/picorv32_firmware/tests/lui.o deleted file mode 100644 index 3a35aa53782eabb73d83461d1fa155d617aee5fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1156 zcmb7DJ8KkC6#gdjNCX{cnYAzx98knUm%MZlEJpCrh%6{ru9Ml31U8$nGeQJm12!TS zfdLCi;ZLy9v}x?8NoSG9e$gMWerIOx<_5IzEN8#RJ@+~HjvhRIXcz`m82F771>85Q zmemrjV-B-u+kkJ|Xgl!U665zat_0ucUBK4(@}&Q21G#-XBc9{|`{pkDxB=o%g?%ud zO!C4D>FxUNBI3Q$8|6iKFL%cy-whFeEKK&>tvspgAl@&Gws_@OFAz5iBc4ArxgIaK zJC^SRcJ7QVfA%xy{mT4a=TVJ6k;0Spvz~R%7b|!4+9R&N`%9h0-_SgDI)KTa9ww}^ zBAA*6&XP-3Vc;UkRV7({jeJqlH_7)jy-Xfz`VRRsO-tLlrXP{N(exAYLrp)Oa_}?^ zJU^u=T3M22-9faOptU^|><*HhY$|$Ng9K&GGG0a-{fe(tuv)>b3T|UNN>j*{V0MQ| zR!uf7Wcr9(E82w(SQ%bDUsjoQ0k1z-bD%K7Z3LDdf7#3YL=t2_{7+$NGl+v^l!G!3T z5JWn({`AZTe((|m#429J$>6SGzoEGuZX&LU4>>TRg%d~7O`~Yp8 zoN8`qO`aC1rk6XY@wtk&)r!d6yvXfLOR5)Fd;Ls7g6oZ)Np1u=uT{O6Y5JK#32roY zB)N**-rVd(uH|P&B>1|qEy>m8_G)hveTttMli-rgjkJ>Sj!AI2u{CK|K~Be;mf%Wb zOOmU%lJP1MeARd%$zcxhc$Xx&*4U`IYDHEt$Btyo8uROu{JqxP{Ir?p0`oaPQy0HO z%sP#TKj+1B4xV3H=XX3O)sBMvy7|c8e&*iOeynlWCVIDE(^6mDW)s^i|9cy47p+B* zUFwb7ZD70RQ|)wZ@cBIxd$UJY{fu~a9zOb>o5$y>?{vAbHui_}$Ufzd+vxjTYoy~g zn8#IY&g$o$q~<;Gy@FJ+kFb}#pudrNBFA~f`9bErU_(8Hy_>D3$2$G4Lb}@3?DW^v zut&egb2obKNA+(qD_QP!_~GkX=&W{G?|tm`Z+>b?OYq-n_BMO*-^8&08L1~umPiVJ zHd4|VItsDqNe?g|7oMyK*sc`rmw*Qie=WuYDcOT^5qrypC&K`vO40re;1h-)0zPLr zy*0z%22S25CGUYRn*1@~2ZnzL{Mhg*;B0)sc=9p$py8i_j~V_2cqbkgDY*bpG5IUt z-BFhFy$*cK zFj3z{bOff(XpABT3B6JO#b|)yL76Vi&dR{(U;#z3qZpQZ!g6m|4u$2uu-q^BW}ZBK zbY`L)F42bMV9DNS(I{<TvFbc?>L*sc4xHbC z0#V1KI?tr~iB*3HoaZHtAXc4cR{g}Pb3f;IqCgO<&NHp^C04y3IKL~j3$f}v^Xey7 zeTe>-ou62B-U+#NPA69VefnQW}G<-iKKA75bwuIbzj$C+PbStG*pLKj8W&R-Jc-z7MhL@6i9c^AoGiJ5ASQIV-S|1xchF%OnEm8rxpW+LdB)Wz6wORbmhd&eOCNV_Nd}JN4*efdfEQDg z=;I3Sy&m&Zt~2UuBWmK2h_9>>S%$!mmhGAA!Nco;T)P+n;C|51{&-Bf@u+W1L1bhf r4AxkdIOwb4;rkxI!~WPmx0UUp2}8Gbf}Fy>Hs1rhbhL$$NqqkRZ`RMe diff --git a/picorv32_firmware/tests/mul.S.ignore b/picorv32_firmware/tests/mul.S.ignore deleted file mode 100644 index 0368629..0000000 --- a/picorv32_firmware/tests/mul.S.ignore +++ /dev/null @@ -1,84 +0,0 @@ -# See LICENSE for license details. - -#***************************************************************************** -# mul.S -#----------------------------------------------------------------------------- -# -# Test mul instruction. -# - -#include "riscv_test.h" -#include "test_macros.h" - -RVTEST_RV32U -RVTEST_CODE_BEGIN - - #------------------------------------------------------------- - # Arithmetic tests - #------------------------------------------------------------- - - TEST_RR_OP(32, mul, 0x00001200, 0x00007e00, 0xb6db6db7 ); - TEST_RR_OP(33, mul, 0x00001240, 0x00007fc0, 0xb6db6db7 ); - - TEST_RR_OP( 2, mul, 0x00000000, 0x00000000, 0x00000000 ); - TEST_RR_OP( 3, mul, 0x00000001, 0x00000001, 0x00000001 ); - TEST_RR_OP( 4, mul, 0x00000015, 0x00000003, 0x00000007 ); - - TEST_RR_OP( 5, mul, 0x00000000, 0x00000000, 0xffff8000 ); - TEST_RR_OP( 6, mul, 0x00000000, 0x80000000, 0x00000000 ); - TEST_RR_OP( 7, mul, 0x00000000, 0x80000000, 0xffff8000 ); - - TEST_RR_OP(30, mul, 0x0000ff7f, 0xaaaaaaab, 0x0002fe7d ); - TEST_RR_OP(31, mul, 0x0000ff7f, 0x0002fe7d, 0xaaaaaaab ); - - TEST_RR_OP(34, mul, 0x00000000, 0xff000000, 0xff000000 ); - - TEST_RR_OP(35, mul, 0x00000001, 0xffffffff, 0xffffffff ); - TEST_RR_OP(36, mul, 0xffffffff, 0xffffffff, 0x00000001 ); - TEST_RR_OP(37, mul, 0xffffffff, 0x00000001, 0xffffffff ); - - #------------------------------------------------------------- - # Source/Destination tests - #------------------------------------------------------------- - - TEST_RR_SRC1_EQ_DEST( 8, mul, 143, 13, 11 ); - TEST_RR_SRC2_EQ_DEST( 9, mul, 154, 14, 11 ); - TEST_RR_SRC12_EQ_DEST( 10, mul, 169, 13 ); - - #------------------------------------------------------------- - # Bypassing tests - #------------------------------------------------------------- - - TEST_RR_DEST_BYPASS( 11, 0, mul, 143, 13, 11 ); - TEST_RR_DEST_BYPASS( 12, 1, mul, 154, 14, 11 ); - TEST_RR_DEST_BYPASS( 13, 2, mul, 165, 15, 11 ); - - TEST_RR_SRC12_BYPASS( 14, 0, 0, mul, 143, 13, 11 ); - TEST_RR_SRC12_BYPASS( 15, 0, 1, mul, 154, 14, 11 ); - TEST_RR_SRC12_BYPASS( 16, 0, 2, mul, 165, 15, 11 ); - TEST_RR_SRC12_BYPASS( 17, 1, 0, mul, 143, 13, 11 ); - TEST_RR_SRC12_BYPASS( 18, 1, 1, mul, 154, 14, 11 ); - TEST_RR_SRC12_BYPASS( 19, 2, 0, mul, 165, 15, 11 ); - - TEST_RR_SRC21_BYPASS( 20, 0, 0, mul, 143, 13, 11 ); - TEST_RR_SRC21_BYPASS( 21, 0, 1, mul, 154, 14, 11 ); - TEST_RR_SRC21_BYPASS( 22, 0, 2, mul, 165, 15, 11 ); - TEST_RR_SRC21_BYPASS( 23, 1, 0, mul, 143, 13, 11 ); - TEST_RR_SRC21_BYPASS( 24, 1, 1, mul, 154, 14, 11 ); - TEST_RR_SRC21_BYPASS( 25, 2, 0, mul, 165, 15, 11 ); - - TEST_RR_ZEROSRC1( 26, mul, 0, 31 ); - TEST_RR_ZEROSRC2( 27, mul, 0, 32 ); - TEST_RR_ZEROSRC12( 28, mul, 0 ); - TEST_RR_ZERODEST( 29, mul, 33, 34 ); - - TEST_PASSFAIL - -RVTEST_CODE_END - - .data -RVTEST_DATA_BEGIN - - TEST_DATA - -RVTEST_DATA_END diff --git a/picorv32_firmware/tests/mulh.S.ignore b/picorv32_firmware/tests/mulh.S.ignore deleted file mode 100644 index e583f5f..0000000 --- a/picorv32_firmware/tests/mulh.S.ignore +++ /dev/null @@ -1,81 +0,0 @@ -# See LICENSE for license details. - -#***************************************************************************** -# mulh.S -#----------------------------------------------------------------------------- -# -# Test mulh instruction. -# - -#include "riscv_test.h" -#include "test_macros.h" - -RVTEST_RV32U -RVTEST_CODE_BEGIN - - #------------------------------------------------------------- - # Arithmetic tests - #------------------------------------------------------------- - - TEST_RR_OP( 2, mulh, 0x00000000, 0x00000000, 0x00000000 ); - TEST_RR_OP( 3, mulh, 0x00000000, 0x00000001, 0x00000001 ); - TEST_RR_OP( 4, mulh, 0x00000000, 0x00000003, 0x00000007 ); - - TEST_RR_OP( 5, mulh, 0x00000000, 0x00000000, 0xffff8000 ); - TEST_RR_OP( 6, mulh, 0x00000000, 0x80000000, 0x00000000 ); - TEST_RR_OP( 7, mulh, 0x00000000, 0x80000000, 0x00000000 ); - - TEST_RR_OP(30, mulh, 0xffff0081, 0xaaaaaaab, 0x0002fe7d ); - TEST_RR_OP(31, mulh, 0xffff0081, 0x0002fe7d, 0xaaaaaaab ); - - TEST_RR_OP(32, mulh, 0x00010000, 0xff000000, 0xff000000 ); - - TEST_RR_OP(33, mulh, 0x00000000, 0xffffffff, 0xffffffff ); - TEST_RR_OP(34, mulh, 0xffffffff, 0xffffffff, 0x00000001 ); - TEST_RR_OP(35, mulh, 0xffffffff, 0x00000001, 0xffffffff ); - - #------------------------------------------------------------- - # Source/Destination tests - #------------------------------------------------------------- - - TEST_RR_SRC1_EQ_DEST( 8, mulh, 36608, 13<<20, 11<<20 ); - TEST_RR_SRC2_EQ_DEST( 9, mulh, 39424, 14<<20, 11<<20 ); - TEST_RR_SRC12_EQ_DEST( 10, mulh, 43264, 13<<20 ); - - #------------------------------------------------------------- - # Bypassing tests - #------------------------------------------------------------- - - TEST_RR_DEST_BYPASS( 11, 0, mulh, 36608, 13<<20, 11<<20 ); - TEST_RR_DEST_BYPASS( 12, 1, mulh, 39424, 14<<20, 11<<20 ); - TEST_RR_DEST_BYPASS( 13, 2, mulh, 42240, 15<<20, 11<<20 ); - - TEST_RR_SRC12_BYPASS( 14, 0, 0, mulh, 36608, 13<<20, 11<<20 ); - TEST_RR_SRC12_BYPASS( 15, 0, 1, mulh, 39424, 14<<20, 11<<20 ); - TEST_RR_SRC12_BYPASS( 16, 0, 2, mulh, 42240, 15<<20, 11<<20 ); - TEST_RR_SRC12_BYPASS( 17, 1, 0, mulh, 36608, 13<<20, 11<<20 ); - TEST_RR_SRC12_BYPASS( 18, 1, 1, mulh, 39424, 14<<20, 11<<20 ); - TEST_RR_SRC12_BYPASS( 19, 2, 0, mulh, 42240, 15<<20, 11<<20 ); - - TEST_RR_SRC21_BYPASS( 20, 0, 0, mulh, 36608, 13<<20, 11<<20 ); - TEST_RR_SRC21_BYPASS( 21, 0, 1, mulh, 39424, 14<<20, 11<<20 ); - TEST_RR_SRC21_BYPASS( 22, 0, 2, mulh, 42240, 15<<20, 11<<20 ); - TEST_RR_SRC21_BYPASS( 23, 1, 0, mulh, 36608, 13<<20, 11<<20 ); - TEST_RR_SRC21_BYPASS( 24, 1, 1, mulh, 39424, 14<<20, 11<<20 ); - TEST_RR_SRC21_BYPASS( 25, 2, 0, mulh, 42240, 15<<20, 11<<20 ); - - TEST_RR_ZEROSRC1( 26, mulh, 0, 31<<26 ); - TEST_RR_ZEROSRC2( 27, mulh, 0, 32<<26 ); - TEST_RR_ZEROSRC12( 28, mulh, 0 ); - TEST_RR_ZERODEST( 29, mulh, 33<<20, 34<<20 ); - - TEST_PASSFAIL - -RVTEST_CODE_END - - .data -RVTEST_DATA_BEGIN - - TEST_DATA - -RVTEST_DATA_END diff --git a/picorv32_firmware/tests/mulhsu.S.ignore b/picorv32_firmware/tests/mulhsu.S.ignore deleted file mode 100644 index 28b3690..0000000 --- a/picorv32_firmware/tests/mulhsu.S.ignore +++ /dev/null @@ -1,83 +0,0 @@ -# See LICENSE for license details. - -#***************************************************************************** -# mulhsu.S -#----------------------------------------------------------------------------- -# -# Test mulhsu instruction. -# - -#include "riscv_test.h" -#include "test_macros.h" - -RVTEST_RV32U -RVTEST_CODE_BEGIN - - #------------------------------------------------------------- - # Arithmetic tests - #------------------------------------------------------------- - - TEST_RR_OP( 2, mulhsu, 0x00000000, 0x00000000, 0x00000000 ); - TEST_RR_OP( 3, mulhsu, 0x00000000, 0x00000001, 0x00000001 ); - TEST_RR_OP( 4, mulhsu, 0x00000000, 0x00000003, 0x00000007 ); - - TEST_RR_OP( 5, mulhsu, 0x00000000, 0x00000000, 0xffff8000 ); - TEST_RR_OP( 6, mulhsu, 0x00000000, 0x80000000, 0x00000000 ); - TEST_RR_OP( 7, mulhsu, 0x80004000, 0x80000000, 0xffff8000 ); - - TEST_RR_OP(30, mulhsu, 0xffff0081, 0xaaaaaaab, 0x0002fe7d ); - TEST_RR_OP(31, mulhsu, 0x0001fefe, 0x0002fe7d, 0xaaaaaaab ); - - TEST_RR_OP(32, mulhsu, 0xff010000, 0xff000000, 0xff000000 ); - - TEST_RR_OP(33, mulhsu, 0xffffffff, 0xffffffff, 0xffffffff ); - TEST_RR_OP(34, mulhsu, 0xffffffff, 0xffffffff, 0x00000001 ); - TEST_RR_OP(35, mulhsu, 0x00000000, 0x00000001, 0xffffffff ); - - #------------------------------------------------------------- - # Source/Destination tests - #------------------------------------------------------------- - - TEST_RR_SRC1_EQ_DEST( 8, mulhsu, 36608, 13<<20, 11<<20 ); - TEST_RR_SRC2_EQ_DEST( 9, mulhsu, 39424, 14<<20, 11<<20 ); - TEST_RR_SRC12_EQ_DEST( 10, mulhsu, 43264, 13<<20 ); - - #------------------------------------------------------------- - # Bypassing tests - #------------------------------------------------------------- - - TEST_RR_DEST_BYPASS( 11, 0, mulhsu, 36608, 13<<20, 11<<20 ); - TEST_RR_DEST_BYPASS( 12, 1, mulhsu, 39424, 14<<20, 11<<20 ); - TEST_RR_DEST_BYPASS( 13, 2, mulhsu, 42240, 15<<20, 11<<20 ); - - TEST_RR_SRC12_BYPASS( 14, 0, 0, mulhsu, 36608, 13<<20, 11<<20 ); - TEST_RR_SRC12_BYPASS( 15, 0, 1, mulhsu, 39424, 14<<20, 11<<20 ); - TEST_RR_SRC12_BYPASS( 16, 0, 2, mulhsu, 42240, 15<<20, 11<<20 ); - TEST_RR_SRC12_BYPASS( 17, 1, 0, mulhsu, 36608, 13<<20, 11<<20 ); - TEST_RR_SRC12_BYPASS( 18, 1, 1, mulhsu, 39424, 14<<20, 11<<20 ); - TEST_RR_SRC12_BYPASS( 19, 2, 0, mulhsu, 42240, 15<<20, 11<<20 ); - - TEST_RR_SRC21_BYPASS( 20, 0, 0, mulhsu, 36608, 13<<20, 11<<20 ); - TEST_RR_SRC21_BYPASS( 21, 0, 1, mulhsu, 39424, 14<<20, 11<<20 ); - TEST_RR_SRC21_BYPASS( 22, 0, 2, mulhsu, 42240, 15<<20, 11<<20 ); - TEST_RR_SRC21_BYPASS( 23, 1, 0, mulhsu, 36608, 13<<20, 11<<20 ); - TEST_RR_SRC21_BYPASS( 24, 1, 1, mulhsu, 39424, 14<<20, 11<<20 ); - TEST_RR_SRC21_BYPASS( 25, 2, 0, mulhsu, 42240, 15<<20, 11<<20 ); - - TEST_RR_ZEROSRC1( 26, mulhsu, 0, 31<<26 ); - TEST_RR_ZEROSRC2( 27, mulhsu, 0, 32<<26 ); - TEST_RR_ZEROSRC12( 28, mulhsu, 0 ); - TEST_RR_ZERODEST( 29, mulhsu, 33<<20, 34<<20 ); - - - - TEST_PASSFAIL - -RVTEST_CODE_END - - .data -RVTEST_DATA_BEGIN - - TEST_DATA - -RVTEST_DATA_END diff --git a/picorv32_firmware/tests/mulhu.S.ignore b/picorv32_firmware/tests/mulhu.S.ignore deleted file mode 100644 index 601dcff..0000000 --- a/picorv32_firmware/tests/mulhu.S.ignore +++ /dev/null @@ -1,82 +0,0 @@ -# See LICENSE for license details. - -#***************************************************************************** -# mulhu.S -#----------------------------------------------------------------------------- -# -# Test mulhu instruction. -# - -#include "riscv_test.h" -#include "test_macros.h" - -RVTEST_RV32U -RVTEST_CODE_BEGIN - - #------------------------------------------------------------- - # Arithmetic tests - #------------------------------------------------------------- - - TEST_RR_OP( 2, mulhu, 0x00000000, 0x00000000, 0x00000000 ); - TEST_RR_OP( 3, mulhu, 0x00000000, 0x00000001, 0x00000001 ); - TEST_RR_OP( 4, mulhu, 0x00000000, 0x00000003, 0x00000007 ); - - TEST_RR_OP( 5, mulhu, 0x00000000, 0x00000000, 0xffff8000 ); - TEST_RR_OP( 6, mulhu, 0x00000000, 0x80000000, 0x00000000 ); - TEST_RR_OP( 7, mulhu, 0x7fffc000, 0x80000000, 0xffff8000 ); - - TEST_RR_OP(30, mulhu, 0x0001fefe, 0xaaaaaaab, 0x0002fe7d ); - TEST_RR_OP(31, mulhu, 0x0001fefe, 0x0002fe7d, 0xaaaaaaab ); - - TEST_RR_OP(32, mulhu, 0xfe010000, 0xff000000, 0xff000000 ); - - TEST_RR_OP(33, mulhu, 0xfffffffe, 0xffffffff, 0xffffffff ); - TEST_RR_OP(34, mulhu, 0x00000000, 0xffffffff, 0x00000001 ); - TEST_RR_OP(35, mulhu, 0x00000000, 0x00000001, 0xffffffff ); - - #------------------------------------------------------------- - # Source/Destination tests - #------------------------------------------------------------- - - TEST_RR_SRC1_EQ_DEST( 8, mulhu, 36608, 13<<20, 11<<20 ); - TEST_RR_SRC2_EQ_DEST( 9, mulhu, 39424, 14<<20, 11<<20 ); - TEST_RR_SRC12_EQ_DEST( 10, mulhu, 43264, 13<<20 ); - - #------------------------------------------------------------- - # Bypassing tests - #------------------------------------------------------------- - - TEST_RR_DEST_BYPASS( 11, 0, mulhu, 36608, 13<<20, 11<<20 ); - TEST_RR_DEST_BYPASS( 12, 1, mulhu, 39424, 14<<20, 11<<20 ); - TEST_RR_DEST_BYPASS( 13, 2, mulhu, 42240, 15<<20, 11<<20 ); - - TEST_RR_SRC12_BYPASS( 14, 0, 0, mulhu, 36608, 13<<20, 11<<20 ); - TEST_RR_SRC12_BYPASS( 15, 0, 1, mulhu, 39424, 14<<20, 11<<20 ); - TEST_RR_SRC12_BYPASS( 16, 0, 2, mulhu, 42240, 15<<20, 11<<20 ); - TEST_RR_SRC12_BYPASS( 17, 1, 0, mulhu, 36608, 13<<20, 11<<20 ); - TEST_RR_SRC12_BYPASS( 18, 1, 1, mulhu, 39424, 14<<20, 11<<20 ); - TEST_RR_SRC12_BYPASS( 19, 2, 0, mulhu, 42240, 15<<20, 11<<20 ); - - TEST_RR_SRC21_BYPASS( 20, 0, 0, mulhu, 36608, 13<<20, 11<<20 ); - TEST_RR_SRC21_BYPASS( 21, 0, 1, mulhu, 39424, 14<<20, 11<<20 ); - TEST_RR_SRC21_BYPASS( 22, 0, 2, mulhu, 42240, 15<<20, 11<<20 ); - TEST_RR_SRC21_BYPASS( 23, 1, 0, mulhu, 36608, 13<<20, 11<<20 ); - TEST_RR_SRC21_BYPASS( 24, 1, 1, mulhu, 39424, 14<<20, 11<<20 ); - TEST_RR_SRC21_BYPASS( 25, 2, 0, mulhu, 42240, 15<<20, 11<<20 ); - - TEST_RR_ZEROSRC1( 26, mulhu, 0, 31<<26 ); - TEST_RR_ZEROSRC2( 27, mulhu, 0, 32<<26 ); - TEST_RR_ZEROSRC12( 28, mulhu, 0 ); - TEST_RR_ZERODEST( 29, mulhu, 33<<20, 34<<20 ); - - - TEST_PASSFAIL - -RVTEST_CODE_END - - .data -RVTEST_DATA_BEGIN - - TEST_DATA - -RVTEST_DATA_END diff --git a/picorv32_firmware/tests/or.S b/picorv32_firmware/tests/or.S deleted file mode 100644 index 110bcc4..0000000 --- a/picorv32_firmware/tests/or.S +++ /dev/null @@ -1,69 +0,0 @@ -# See LICENSE for license details. - -#***************************************************************************** -# or.S -#----------------------------------------------------------------------------- -# -# Test or instruction. -# - -#include "riscv_test.h" -#include "test_macros.h" - -RVTEST_RV32U -RVTEST_CODE_BEGIN - - #------------------------------------------------------------- - # Logical tests - #------------------------------------------------------------- - - TEST_RR_OP( 2, or, 0xff0fff0f, 0xff00ff00, 0x0f0f0f0f ); - TEST_RR_OP( 3, or, 0xfff0fff0, 0x0ff00ff0, 0xf0f0f0f0 ); - TEST_RR_OP( 4, or, 0x0fff0fff, 0x00ff00ff, 0x0f0f0f0f ); - TEST_RR_OP( 5, or, 0xf0fff0ff, 0xf00ff00f, 0xf0f0f0f0 ); - - #------------------------------------------------------------- - # Source/Destination tests - #------------------------------------------------------------- - - TEST_RR_SRC1_EQ_DEST( 6, or, 0xff0fff0f, 0xff00ff00, 0x0f0f0f0f ); - TEST_RR_SRC2_EQ_DEST( 7, or, 0xff0fff0f, 0xff00ff00, 0x0f0f0f0f ); - TEST_RR_SRC12_EQ_DEST( 8, or, 0xff00ff00, 0xff00ff00 ); - - #------------------------------------------------------------- - # Bypassing tests - #------------------------------------------------------------- - - TEST_RR_DEST_BYPASS( 9, 0, or, 0xff0fff0f, 0xff00ff00, 0x0f0f0f0f ); - TEST_RR_DEST_BYPASS( 10, 1, or, 0xfff0fff0, 0x0ff00ff0, 0xf0f0f0f0 ); - TEST_RR_DEST_BYPASS( 11, 2, or, 0x0fff0fff, 0x00ff00ff, 0x0f0f0f0f ); - - TEST_RR_SRC12_BYPASS( 12, 0, 0, or, 0xff0fff0f, 0xff00ff00, 0x0f0f0f0f ); - TEST_RR_SRC12_BYPASS( 13, 0, 1, or, 0xfff0fff0, 0x0ff00ff0, 0xf0f0f0f0 ); - TEST_RR_SRC12_BYPASS( 14, 0, 2, or, 0x0fff0fff, 0x00ff00ff, 0x0f0f0f0f ); - TEST_RR_SRC12_BYPASS( 15, 1, 0, or, 0xff0fff0f, 0xff00ff00, 0x0f0f0f0f ); - TEST_RR_SRC12_BYPASS( 16, 1, 1, or, 0xfff0fff0, 0x0ff00ff0, 0xf0f0f0f0 ); - TEST_RR_SRC12_BYPASS( 17, 2, 0, or, 0x0fff0fff, 0x00ff00ff, 0x0f0f0f0f ); - - TEST_RR_SRC21_BYPASS( 18, 0, 0, or, 0xff0fff0f, 0xff00ff00, 0x0f0f0f0f ); - TEST_RR_SRC21_BYPASS( 19, 0, 1, or, 0xfff0fff0, 0x0ff00ff0, 0xf0f0f0f0 ); - TEST_RR_SRC21_BYPASS( 20, 0, 2, or, 0x0fff0fff, 0x00ff00ff, 0x0f0f0f0f ); - TEST_RR_SRC21_BYPASS( 21, 1, 0, or, 0xff0fff0f, 0xff00ff00, 0x0f0f0f0f ); - TEST_RR_SRC21_BYPASS( 22, 1, 1, or, 0xfff0fff0, 0x0ff00ff0, 0xf0f0f0f0 ); - TEST_RR_SRC21_BYPASS( 23, 2, 0, or, 0x0fff0fff, 0x00ff00ff, 0x0f0f0f0f ); - - TEST_RR_ZEROSRC1( 24, or, 0xff00ff00, 0xff00ff00 ); - TEST_RR_ZEROSRC2( 25, or, 0x00ff00ff, 0x00ff00ff ); - TEST_RR_ZEROSRC12( 26, or, 0 ); - TEST_RR_ZERODEST( 27, or, 0x11111111, 0x22222222 ); - - TEST_PASSFAIL - -RVTEST_CODE_END - - .data -RVTEST_DATA_BEGIN - - TEST_DATA - -RVTEST_DATA_END diff --git a/picorv32_firmware/tests/or.o b/picorv32_firmware/tests/or.o deleted file mode 100644 index 16d1f101138cf30fd07317afbcd5889087912a02..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3548 zcmb7GO>9(E6h61@l!|2L4G)Y!#c3&mfp|B%#Bj1|!gBW)>Jt zY|<`>CWJV|G}@RZveN}g(IJsV6LF=BPJo0&7DLdLE?xr*7Np~M-o1A?uRjZKGxvPo zdFPyW?z!jQ*Ut|Ry{42RI~3ig$BbxZgMQK%irv&f>nIl^a$_;dwUaXm>3guCgH}1 z$)BkmT#-**<}*V6Hw&*Wx5-9w9w-0l+AG#(uI^wxSmXIP)-%EWFS{+Y>bl)YMQ+PR zs}k=x`6uB_Nuly(=l$Cy^JE{{57Bqp z9t*gCcFJ5sKhtX~@{QD%6#BDE=4?y^D3k5idOd7nI*wYn>ax{S?P}iq9hd zh1RN*OjahGWUi~b+f`lNS=?LMcpLDH z;Ol|!2<`woV*O8n4+`E1J|%cJ_%*@#-46v%gZGJg^n;%i{3Y;N!4HDp5&TW?O=7+8 zfDa4)KDZqY`tgGZ$CGqq@iHb} z#>C6yXuMD=QF_R0@xnP1&e?G83+MiD-XG4na6S;u1L2I7gwERA)9#-3$11{S{e=JB z#)`*^qh(Y4t<60l${HQ3wi!JOt9O8%c5T!Nku?1~%=!+k=eQP63w%xBy1?Am);=Zh zAmbe{#Nb}BHdBmywEm*dUuV2i>u(DEL&khLVsxOtZJb`lyR<$p^rsl_*80zc{u1No zwf>6G*BQT{^?}fL;w(6Ow0k(xp#MmkY-!T`Cu~JZVvJ z^i%=InGf%YLb*Wc<7o8%F;cL_Hj-&Q>H|L1ygLbBOFgzhFwSdAo$GODV^7$W{rMSx zL%AK8qlDo&D`K(2#^Y_`ZClHZWAI>!*E9#m%fpHDvZz0cB0&_oC?wODDHhXYn3+Y3 zg$~4(LI^%7MFJLAS%_qzjtdvrxO0&qb|Wq(*n*2L9=Ol=oqOM%oGM-P4ELVzJMWxx z&%O7|z4!K&cRbI76A%C3kO5l-`=x5s>lnodX7fOp&ttZLV2wKZJdamOKhZXh)#T;D zYV#)Id_N;L8C`gTxPv6#PmA2k}0N-E+k2{vhNQ zp>02DbbaFWgL|Prhv-4?bT=s`{00+uK)ilX4E=dTU-wQ9*XlE;&vi}CMMRss<6#ES zYldqc!pt$mnG*gw{=vav4Gl!c_d?^Z>IiuT&%_*K%&@i&qKUntiBa{LnE%EFj2qUy zf#}@cOaH6Q)pbJG^-%VIMAs$xs$VcNbwlY0!?)@AG_iy=Y=5%U%fL{CqAfl=5*Q$%P{idFMZJ{F;tOseXbM z0_h$4)330diwoNK5qsyGKTMlFXUaa)nLw65Em`D@M`>vEaFkev6%VHgUUih-uMtlv zexCR!`^1WeX@d70rT-=3CB^56JBq(cys7y6#6K(k5%J%OUn4#<{KI*O$Ujv46Y`GY zE%NUa|CGG1_!@bl_!s1Fsr_t_|H5I#!+nCMj&gredr8HAOMX@HE%MJ4|DJqX@gK;Y z1k881ckuQp<#xT*URbH!s-xU!ie6Z$-);}d(&|bb#%CHgYB!fHp0TQG)dj0AS~Y9c zn^s-2sxp=8N~)(*oo1?3(WtdrC|{{$DrTNG^Ng9RX1-wNi;(w>W1(4Zo2^ac+zx@6 z6pCpwwTp6g*>jM-p=XH4_;!k1<_Ja&#G=A?6@H+woU8NyUGND`l*b&-KFWItP8u^# z2~P9R2|i`*^UA&~SpE={yUM;Pc*5GZl>Ilslh*#HvOiTg$6j;mjtU;P{#S{|&RUFe z>&~rq?K*Y4Y4yhrHS5bYwum&uQmtJ>`8qG@1*Ak@mV@-jQ6;{{wVk9_1lfk*x%9&n z@8vQB<$5GuzR9~G?}Kpn(rl<)G#fwBZ*a(QKhIBch=|rHBwwFKsaN_#)|H+)!r^ie YqQMV40#b4L#>ll_n~5sUiQ4)73(dMi1ONa4 diff --git a/picorv32_firmware/tests/rem.S.ignore b/picorv32_firmware/tests/rem.S.ignore deleted file mode 100644 index 7955736..0000000 --- a/picorv32_firmware/tests/rem.S.ignore +++ /dev/null @@ -1,41 +0,0 @@ -# See LICENSE for license details. - -#***************************************************************************** -# rem.S -#----------------------------------------------------------------------------- -# -# Test rem instruction. -# - -#include "riscv_test.h" -#include "test_macros.h" - -RVTEST_RV32U -RVTEST_CODE_BEGIN - - #------------------------------------------------------------- - # Arithmetic tests - #------------------------------------------------------------- - - TEST_RR_OP( 2, rem, 2, 20, 6 ); - TEST_RR_OP( 3, rem, -2, -20, 6 ); - TEST_RR_OP( 4, rem, 2, 20, -6 ); - TEST_RR_OP( 5, rem, -2, -20, -6 ); - - TEST_RR_OP( 6, rem, 0, -1<<31, 1 ); - TEST_RR_OP( 7, rem, 0, -1<<31, -1 ); - - TEST_RR_OP( 8, rem, -1<<31, -1<<31, 0 ); - TEST_RR_OP( 9, rem, 1, 1, 0 ); - TEST_RR_OP(10, rem, 0, 0, 0 ); - - TEST_PASSFAIL - -RVTEST_CODE_END - - .data -RVTEST_DATA_BEGIN - - TEST_DATA - -RVTEST_DATA_END diff --git a/picorv32_firmware/tests/remu.S.ignore b/picorv32_firmware/tests/remu.S.ignore deleted file mode 100644 index a96cfc1..0000000 --- a/picorv32_firmware/tests/remu.S.ignore +++ /dev/null @@ -1,41 +0,0 @@ -# See LICENSE for license details. - -#***************************************************************************** -# remu.S -#----------------------------------------------------------------------------- -# -# Test remu instruction. -# - -#include "riscv_test.h" -#include "test_macros.h" - -RVTEST_RV32U -RVTEST_CODE_BEGIN - - #------------------------------------------------------------- - # Arithmetic tests - #------------------------------------------------------------- - - TEST_RR_OP( 2, remu, 2, 20, 6 ); - TEST_RR_OP( 3, remu, 2, -20, 6 ); - TEST_RR_OP( 4, remu, 20, 20, -6 ); - TEST_RR_OP( 5, remu, -20, -20, -6 ); - - TEST_RR_OP( 6, remu, 0, -1<<31, 1 ); - TEST_RR_OP( 7, remu, -1<<31, -1<<31, -1 ); - - TEST_RR_OP( 8, remu, -1<<31, -1<<31, 0 ); - TEST_RR_OP( 9, remu, 1, 1, 0 ); - TEST_RR_OP(10, remu, 0, 0, 0 ); - - TEST_PASSFAIL - -RVTEST_CODE_END - - .data -RVTEST_DATA_BEGIN - - TEST_DATA - -RVTEST_DATA_END diff --git a/picorv32_firmware/tests/riscv_test.h b/picorv32_firmware/tests/riscv_test.h deleted file mode 100644 index 71a4366..0000000 --- a/picorv32_firmware/tests/riscv_test.h +++ /dev/null @@ -1,64 +0,0 @@ -#ifndef _ENV_PICORV32_TEST_H -#define _ENV_PICORV32_TEST_H - -#ifndef TEST_FUNC_NAME -# define TEST_FUNC_NAME mytest -# define TEST_FUNC_TXT "mytest" -# define TEST_FUNC_RET mytest_ret -#endif - -#define RVTEST_RV32U -#define TESTNUM x28 - -#define RVTEST_CODE_BEGIN \ - .text; \ - .global TEST_FUNC_NAME; \ - .global TEST_FUNC_RET; \ -TEST_FUNC_NAME: \ - lui a0,%hi(.test_name); \ - addi a0,a0,%lo(.test_name); \ - lui a2,0x10000000>>12; \ -.prname_next: \ - lb a1,0(a0); \ - beq a1,zero,.prname_done; \ - sw a1,0(a2); \ - addi a0,a0,1; \ - jal zero,.prname_next; \ -.test_name: \ - .ascii TEST_FUNC_TXT; \ - .byte 0x00; \ - .balign 4, 0; \ -.prname_done: \ - addi a1,zero,'.'; \ - sw a1,0(a2); \ - sw a1,0(a2); - -#define RVTEST_PASS \ - lui a0,0x10000000>>12; \ - addi a1,zero,'O'; \ - addi a2,zero,'K'; \ - addi a3,zero,'\n'; \ - sw a1,0(a0); \ - sw a2,0(a0); \ - sw a3,0(a0); \ - jal zero,TEST_FUNC_RET; - -#define RVTEST_FAIL \ - lui a0,0x10000000>>12; \ - addi a1,zero,'E'; \ - addi a2,zero,'R'; \ - addi a3,zero,'O'; \ - addi a4,zero,'\n'; \ - sw a1,0(a0); \ - sw a2,0(a0); \ - sw a2,0(a0); \ - sw a3,0(a0); \ - sw a2,0(a0); \ - sw a4,0(a0); \ - ebreak; - -#define RVTEST_CODE_END -#define RVTEST_DATA_BEGIN .balign 4; -#define RVTEST_DATA_END - -#endif diff --git a/picorv32_firmware/tests/sb.S b/picorv32_firmware/tests/sb.S deleted file mode 100644 index 05d1894..0000000 --- a/picorv32_firmware/tests/sb.S +++ /dev/null @@ -1,96 +0,0 @@ -# See LICENSE for license details. - -#***************************************************************************** -# sb.S -#----------------------------------------------------------------------------- -# -# Test sb instruction. -# - -#include "riscv_test.h" -#include "test_macros.h" - -RVTEST_RV32U -RVTEST_CODE_BEGIN - - #------------------------------------------------------------- - # Basic tests - #------------------------------------------------------------- - - TEST_ST_OP( 2, lb, sb, 0xffffffaa, 0, tdat ); - TEST_ST_OP( 3, lb, sb, 0x00000000, 1, tdat ); - TEST_ST_OP( 4, lh, sb, 0xffffefa0, 2, tdat ); - TEST_ST_OP( 5, lb, sb, 0x0000000a, 3, tdat ); - - # Test with negative offset - - TEST_ST_OP( 6, lb, sb, 0xffffffaa, -3, tdat8 ); - TEST_ST_OP( 7, lb, sb, 0x00000000, -2, tdat8 ); - TEST_ST_OP( 8, lb, sb, 0xffffffa0, -1, tdat8 ); - TEST_ST_OP( 9, lb, sb, 0x0000000a, 0, tdat8 ); - - # Test with a negative base - - TEST_CASE( 10, x3, 0x78, \ - la x1, tdat9; \ - li x2, 0x12345678; \ - addi x4, x1, -32; \ - sb x2, 32(x4); \ - lb x3, 0(x1); \ - ) - - # Test with unaligned base - - TEST_CASE( 11, x3, 0xffffff98, \ - la x1, tdat9; \ - li x2, 0x00003098; \ - addi x1, x1, -6; \ - sb x2, 7(x1); \ - la x4, tdat10; \ - lb x3, 0(x4); \ - ) - - #------------------------------------------------------------- - # Bypassing tests - #------------------------------------------------------------- - - TEST_ST_SRC12_BYPASS( 12, 0, 0, lb, sb, 0xffffffdd, 0, tdat ); - TEST_ST_SRC12_BYPASS( 13, 0, 1, lb, sb, 0xffffffcd, 1, tdat ); - TEST_ST_SRC12_BYPASS( 14, 0, 2, lb, sb, 0xffffffcc, 2, tdat ); - TEST_ST_SRC12_BYPASS( 15, 1, 0, lb, sb, 0xffffffbc, 3, tdat ); - TEST_ST_SRC12_BYPASS( 16, 1, 1, lb, sb, 0xffffffbb, 4, tdat ); - TEST_ST_SRC12_BYPASS( 17, 2, 0, lb, sb, 0xffffffab, 5, tdat ); - - TEST_ST_SRC21_BYPASS( 18, 0, 0, lb, sb, 0x33, 0, tdat ); - TEST_ST_SRC21_BYPASS( 19, 0, 1, lb, sb, 0x23, 1, tdat ); - TEST_ST_SRC21_BYPASS( 20, 0, 2, lb, sb, 0x22, 2, tdat ); - TEST_ST_SRC21_BYPASS( 21, 1, 0, lb, sb, 0x12, 3, tdat ); - TEST_ST_SRC21_BYPASS( 22, 1, 1, lb, sb, 0x11, 4, tdat ); - TEST_ST_SRC21_BYPASS( 23, 2, 0, lb, sb, 0x01, 5, tdat ); - - li a0, 0xef - la a1, tdat - sb a0, 3(a1) - - TEST_PASSFAIL - -RVTEST_CODE_END - - .data -RVTEST_DATA_BEGIN - - TEST_DATA - -tdat: -tdat1: .byte 0xef -tdat2: .byte 0xef -tdat3: .byte 0xef -tdat4: .byte 0xef -tdat5: .byte 0xef -tdat6: .byte 0xef -tdat7: .byte 0xef -tdat8: .byte 0xef -tdat9: .byte 0xef -tdat10: .byte 0xef - -RVTEST_DATA_END diff --git a/picorv32_firmware/tests/sb.o b/picorv32_firmware/tests/sb.o deleted file mode 100644 index fe1fa93684e5e969767f14a1f06f76c4d4b21b03..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4884 zcmb7IZ)lZO9R9uc?rvIkx$`Psb>*v5v($O-cJ*$lH8U;Ca+ZAv25w%L7XBIT5(YwB zD~JlSuHdK_nzG%=*T_q^E|)j zcmD6ZFTSy5`&Q5MM2jbXNSTRTsvETGVuiB@W<1Puh)3) z_o=C*=S|f2p^XoH`R4A_RPlHm?X*gMV5~)b=toNQ^rhJk+G%4v=fo#U$NjtgeWO!$ z9370WEyqRbKVbYC;v7de<4sO{qGaOZjHCZv#xv#kkT~;1{t3p{Xgs$wJ3Hz1?MuEX zck5+I#I8qgO%h|xpB!5q`Z8RzzL~||p{Y{8FY_Yck%;tr5zMRiuVj3f>+?`DJ^~$U zDx-JiVe_y?QZKdedGL+i$$vcdU@|gWiV1cWV(ou{r8T!ro zr7Qgr_ElcLbOh^H8|IifwN~W#CdbSvTt7d8^}8?3GjnR2mPdb4e6PHIzK8M640B9h z9siPpwLxxuxPA!_>lX|2Okdsq$g}+=q!g}SLa=_(X?d~n_$k~8#kXVlyZcP?3r3>2 zBND|}TUD~!j}@!OtCBVNoAAHF?}y-bIe7jeJ(A#^0zZ7!!&Sv<*L#_F%D2CT1(W!X z5}kH?iA3?wEm5g54nGt(DlY+F3Ara7z_%Q}4>*Otds{p?1kmj8*T824QI7W*aEB9r z3w)*%e-HSC6EA{~IQ$dvn+`95ufqLfizlB0bU6G=@BxQ^2R`cX@0l2GlP5odW*z<$ z_yLFi3_j%W>)=-${ww${XFtZl%Oxs*f`r3I$CKdUaKIx7hRp%Z01ul3kAvg52PGO9yb4c$lh+T_h);`wS$2#L`wj^gC z0c)`=lQtG*8N(=YAQ|*xoESB2B>tQCb-2e5lU9|9QcsORPG-qf-x~LLpY2_k;S0Ro?}i zT8RpUSoLmT^%JXJ08Xt!g+i=4?-%tGt3C*v3SMZ$s-L4D-@Yuws-Fi=HBc2HR{aXF z`iWJ)3Y=Pl3WZqpTfpikR(%pUl}3d^tUB*E^%JXJ2b{upG7GWl&GaX&POSO{`uV~} zAy%FDqxy+e-%Ec$h*dvI|6JP+vFgX@&sv>W^+EcB^FXZn5dCYdpICL?zv?GeeU$!n z)=#WD?`QQBt6l}1;s*%|vFg0P)laN?EB(#ZPpmrccl8siUZB6l`iWKN{jYvv)raYS z#QKR<=Y6VvV%4wGzux+ZRp))Heqz;U0jD-tKe6h(kJV4CdMo`Kt)EzR-q-3UR{bdb z{GdZ2R-N~``iWIPL;qvePpmrcd-W5meuMs2>nB#7?>F@mtDXW*ZL)r1)f12s!AD6Q zaBc9x!f(w)@UeHm!6zMj*1?w?eAB`F=FxVt4sLhw`wkv<@Ok3L(HP1NM;|BNZ1pkue!=Q4sxEr{3hsDy+^ZLO;=N>!@N9=RIq9a`g zI`JvM7eC&Cozk!eFU$W?e0Z_s;kRoRxPZR3C|n4ExHSl@xEE(1XNyOQ`HaoNZ+XBm zT~kgYa8H2w(DqgV^D0!|7aE`mg>AC%iLD9CS^Cf^kM(o-k@B4LIBQ#gauz~C8v$3y Q|H^WGLlA;j2h&2|-?~jIDgXcg diff --git a/picorv32_firmware/tests/sh.S b/picorv32_firmware/tests/sh.S deleted file mode 100644 index 387e181..0000000 --- a/picorv32_firmware/tests/sh.S +++ /dev/null @@ -1,96 +0,0 @@ -# See LICENSE for license details. - -#***************************************************************************** -# sh.S -#----------------------------------------------------------------------------- -# -# Test sh instruction. -# - -#include "riscv_test.h" -#include "test_macros.h" - -RVTEST_RV32U -RVTEST_CODE_BEGIN - - #------------------------------------------------------------- - # Basic tests - #------------------------------------------------------------- - - TEST_ST_OP( 2, lh, sh, 0x000000aa, 0, tdat ); - TEST_ST_OP( 3, lh, sh, 0xffffaa00, 2, tdat ); - TEST_ST_OP( 4, lw, sh, 0xbeef0aa0, 4, tdat ); - TEST_ST_OP( 5, lh, sh, 0xffffa00a, 6, tdat ); - - # Test with negative offset - - TEST_ST_OP( 6, lh, sh, 0x000000aa, -6, tdat8 ); - TEST_ST_OP( 7, lh, sh, 0xffffaa00, -4, tdat8 ); - TEST_ST_OP( 8, lh, sh, 0x00000aa0, -2, tdat8 ); - TEST_ST_OP( 9, lh, sh, 0xffffa00a, 0, tdat8 ); - - # Test with a negative base - - TEST_CASE( 10, x3, 0x5678, \ - la x1, tdat9; \ - li x2, 0x12345678; \ - addi x4, x1, -32; \ - sh x2, 32(x4); \ - lh x3, 0(x1); \ - ) - - # Test with unaligned base - - TEST_CASE( 11, x3, 0x3098, \ - la x1, tdat9; \ - li x2, 0x00003098; \ - addi x1, x1, -5; \ - sh x2, 7(x1); \ - la x4, tdat10; \ - lh x3, 0(x4); \ - ) - - #------------------------------------------------------------- - # Bypassing tests - #------------------------------------------------------------- - - TEST_ST_SRC12_BYPASS( 12, 0, 0, lh, sh, 0xffffccdd, 0, tdat ); - TEST_ST_SRC12_BYPASS( 13, 0, 1, lh, sh, 0xffffbccd, 2, tdat ); - TEST_ST_SRC12_BYPASS( 14, 0, 2, lh, sh, 0xffffbbcc, 4, tdat ); - TEST_ST_SRC12_BYPASS( 15, 1, 0, lh, sh, 0xffffabbc, 6, tdat ); - TEST_ST_SRC12_BYPASS( 16, 1, 1, lh, sh, 0xffffaabb, 8, tdat ); - TEST_ST_SRC12_BYPASS( 17, 2, 0, lh, sh, 0xffffdaab, 10, tdat ); - - TEST_ST_SRC21_BYPASS( 18, 0, 0, lh, sh, 0x2233, 0, tdat ); - TEST_ST_SRC21_BYPASS( 19, 0, 1, lh, sh, 0x1223, 2, tdat ); - TEST_ST_SRC21_BYPASS( 20, 0, 2, lh, sh, 0x1122, 4, tdat ); - TEST_ST_SRC21_BYPASS( 21, 1, 0, lh, sh, 0x0112, 6, tdat ); - TEST_ST_SRC21_BYPASS( 22, 1, 1, lh, sh, 0x0011, 8, tdat ); - TEST_ST_SRC21_BYPASS( 23, 2, 0, lh, sh, 0x3001, 10, tdat ); - - li a0, 0xbeef - la a1, tdat - sh a0, 6(a1) - - TEST_PASSFAIL - -RVTEST_CODE_END - - .data -RVTEST_DATA_BEGIN - - TEST_DATA - -tdat: -tdat1: .half 0xbeef -tdat2: .half 0xbeef -tdat3: .half 0xbeef -tdat4: .half 0xbeef -tdat5: .half 0xbeef -tdat6: .half 0xbeef -tdat7: .half 0xbeef -tdat8: .half 0xbeef -tdat9: .half 0xbeef -tdat10: .half 0xbeef - -RVTEST_DATA_END diff --git a/picorv32_firmware/tests/sh.o b/picorv32_firmware/tests/sh.o deleted file mode 100644 index d2b573abb15c2acb0f82d1c3e4982eabdacf902a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5024 zcmb7He`sCh8Gg^bNt)K|a&Jz%Tx(a4xmDbZF*iwjQ*CQ%tv{niw}At(i8ooR*czJ4 za3Gl44a!!e^@_^o+$~m+R^*PUS7-?V6$+~*VJ!>>8fXQUKB(>>!z5HUT5~g~j_=mY|&X>6~4d1ccOYj{Tl-k-$)9@V&Q-e}`Wp1nU z9btb*Bv)pCBT{>p{kNeap*J)%u&5Z$|<=k&ykFgw(c}oaJGv%KmQ&Q!}`SzGkr= zQ?s9TV8bzP$)z*!2U7ct>-5>D=>O(0(JtjgB=5LMj&zwa5^)CO1%wMqiRX%&>1aq{HT*%zf_`IAs zQG9vsI+tsnErFS@$*msubIr3?GJjv3KYbkeKXUoz*=d_U&u3SUF~{#Cw~F~kr1mxE zK79=NS1-+vOumk{7GXc8dU9^PySYDGa>du?R=GU0-aSk6(k8Fdj9J&)oUtvPIA0l; zYvw%oJ-Jc4jy>2mXMQ`izUms=K^!etfIqxbRqB>tU?uV2Wdq*>SChp(mDRBrLT=TO%^uU?wI z@(;uOpOIWrNkx+Q^CKxu#t}I&kTzicYy@&Oz&fRH-vEqdi6fAk6`E^OdU1WbNyR`4 zfWu0Wk0q36J-!{d;_)HiQy%{*aLVzd`~vt(#{(GwPP-RIAUnYaJiZ5f#N)rBA3qyO zc@E&9cmFrw?eSf%*zbX7y!&PF%O3wDct2{HjX>T6D0%!ic-7;71z+&^3Gg1bErEOl zzRTl(13&8Vzk^@!_&>q3-g=)0ANKfH;Q#RW0{CJi9IGFFZ;LZ-7z+78gLQ-16 zTRolvU*YkU;EU%cDXYQ#^Fr>Q2Xg;BkXKxPfywvJ1MmC$PwwwOxxfG9{{EBu`%Qin zKO6RWvkkn}Es(u`X9GXbz&~!_t=@i_@ip*?2L4V1zu3Sdw?TG1k2dhvJbo?aa>|>} z^~B!zZUW!r@jUo*9xs4@=<&_qmp#4>e83yuz2N?Q9s>90^K)>2K97O>^C^P+^LYwf zBQ1gKUczywyEHyo+OcPJ_qcRV?B#XGp7Cc(j*LCCXIzY@S4v}}CHdv(lTTZr&tCfN zWxc&@Fs=bh3icASjh5wmj73@AFp3;V9#1jXxbuA6dp_289WR;fSnbZ3NMF1`l&*<&UR3A5|Bkq55Ub8_`s`28 zAc$3GeNaEK>OTX{-h>80tUBw5`iWI%ZO?Y0K@h860aib;>PLaI@e7Sub=IGb_$5TF z`f2*{?ZhBfo%Kom#HwEe&fbCsL99CKm->lSXD!Wg!4Sl%v%aaHSoKZx<2#%|tUBvo zM`(3o)yL@P3mZYKI_snQiB&&De@uu~XZ`G0W&0sk{cZZWu?S+-XX$UXI0fVk zV%1rH)laN?8*p}m^%JYk`mBCp)$gI7A0!B3)em@nV$~1QKVbdDsa4fwCsw^g|0e4vR-N@&{luzQ>ECSq z#HwHP{KTp+(9aJ#1hML@=h{E9>g#~Bw_884>a6$bCszG2`UkC_SarVN)K9GX>-2B6 zeqzu^?_s{rR6pS1lOF!k!`~3! zfsPUDaAq{Ohj^RS$2@(4_)e==JpCPFeoQ0gJ^do_T~?2O=FYu7JU((92i6>XVj2POCfG{_H55@m!vo5m zhlY>fhIo4CVWaxO+!FfZ_3!wiJLp8f$ot4CFK10K^2To2e{x6u19Q*xSNfZ3zU=@1 zhWWXPfINS*mWP`vs*|LHMRIv&4pvBNHl%uU!hwMC_FT-MoV@41^}$fs>P45y zBslB$BAABWb+GW+9Hrq8+sfx)9Y(5|l{7ke)C~>#4CcRWlDQAhVx=Gk3Cc_NR zEgMFikfUm_voHx!Z^yBz`WIBG(i58zpm#o@TeDZGFd=?m4w@{IPUEUxXWF;+s@T5J zE%~h3ep^iHdVlHELnh3nEc>Y6Jzet_=<25(F3@c+QY^D@U&NU0S7JP?d*s266%noO E2k3l7K>z>% diff --git a/picorv32_firmware/tests/sll.S b/picorv32_firmware/tests/sll.S deleted file mode 100644 index d297ac5..0000000 --- a/picorv32_firmware/tests/sll.S +++ /dev/null @@ -1,90 +0,0 @@ -# See LICENSE for license details. - -#***************************************************************************** -# sll.S -#----------------------------------------------------------------------------- -# -# Test sll instruction. -# - -#include "riscv_test.h" -#include "test_macros.h" - -RVTEST_RV32U -RVTEST_CODE_BEGIN - - #------------------------------------------------------------- - # Arithmetic tests - #------------------------------------------------------------- - - TEST_RR_OP( 2, sll, 0x00000001, 0x00000001, 0 ); - TEST_RR_OP( 3, sll, 0x00000002, 0x00000001, 1 ); - TEST_RR_OP( 4, sll, 0x00000080, 0x00000001, 7 ); - TEST_RR_OP( 5, sll, 0x00004000, 0x00000001, 14 ); - TEST_RR_OP( 6, sll, 0x80000000, 0x00000001, 31 ); - - TEST_RR_OP( 7, sll, 0xffffffff, 0xffffffff, 0 ); - TEST_RR_OP( 8, sll, 0xfffffffe, 0xffffffff, 1 ); - TEST_RR_OP( 9, sll, 0xffffff80, 0xffffffff, 7 ); - TEST_RR_OP( 10, sll, 0xffffc000, 0xffffffff, 14 ); - TEST_RR_OP( 11, sll, 0x80000000, 0xffffffff, 31 ); - - TEST_RR_OP( 12, sll, 0x21212121, 0x21212121, 0 ); - TEST_RR_OP( 13, sll, 0x42424242, 0x21212121, 1 ); - TEST_RR_OP( 14, sll, 0x90909080, 0x21212121, 7 ); - TEST_RR_OP( 15, sll, 0x48484000, 0x21212121, 14 ); - TEST_RR_OP( 16, sll, 0x80000000, 0x21212121, 31 ); - - # Verify that shifts only use bottom five bits - - TEST_RR_OP( 17, sll, 0x21212121, 0x21212121, 0xffffffe0 ); - TEST_RR_OP( 18, sll, 0x42424242, 0x21212121, 0xffffffe1 ); - TEST_RR_OP( 19, sll, 0x90909080, 0x21212121, 0xffffffe7 ); - TEST_RR_OP( 20, sll, 0x48484000, 0x21212121, 0xffffffee ); - TEST_RR_OP( 21, sll, 0x00000000, 0x21212120, 0xffffffff ); - - #------------------------------------------------------------- - # Source/Destination tests - #------------------------------------------------------------- - - TEST_RR_SRC1_EQ_DEST( 22, sll, 0x00000080, 0x00000001, 7 ); - TEST_RR_SRC2_EQ_DEST( 23, sll, 0x00004000, 0x00000001, 14 ); - TEST_RR_SRC12_EQ_DEST( 24, sll, 24, 3 ); - - #------------------------------------------------------------- - # Bypassing tests - #------------------------------------------------------------- - - TEST_RR_DEST_BYPASS( 25, 0, sll, 0x00000080, 0x00000001, 7 ); - TEST_RR_DEST_BYPASS( 26, 1, sll, 0x00004000, 0x00000001, 14 ); - TEST_RR_DEST_BYPASS( 27, 2, sll, 0x80000000, 0x00000001, 31 ); - - TEST_RR_SRC12_BYPASS( 28, 0, 0, sll, 0x00000080, 0x00000001, 7 ); - TEST_RR_SRC12_BYPASS( 29, 0, 1, sll, 0x00004000, 0x00000001, 14 ); - TEST_RR_SRC12_BYPASS( 30, 0, 2, sll, 0x80000000, 0x00000001, 31 ); - TEST_RR_SRC12_BYPASS( 31, 1, 0, sll, 0x00000080, 0x00000001, 7 ); - TEST_RR_SRC12_BYPASS( 32, 1, 1, sll, 0x00004000, 0x00000001, 14 ); - TEST_RR_SRC12_BYPASS( 33, 2, 0, sll, 0x80000000, 0x00000001, 31 ); - - TEST_RR_SRC21_BYPASS( 34, 0, 0, sll, 0x00000080, 0x00000001, 7 ); - TEST_RR_SRC21_BYPASS( 35, 0, 1, sll, 0x00004000, 0x00000001, 14 ); - TEST_RR_SRC21_BYPASS( 36, 0, 2, sll, 0x80000000, 0x00000001, 31 ); - TEST_RR_SRC21_BYPASS( 37, 1, 0, sll, 0x00000080, 0x00000001, 7 ); - TEST_RR_SRC21_BYPASS( 38, 1, 1, sll, 0x00004000, 0x00000001, 14 ); - TEST_RR_SRC21_BYPASS( 39, 2, 0, sll, 0x80000000, 0x00000001, 31 ); - - TEST_RR_ZEROSRC1( 40, sll, 0, 15 ); - TEST_RR_ZEROSRC2( 41, sll, 32, 32 ); - TEST_RR_ZEROSRC12( 42, sll, 0 ); - TEST_RR_ZERODEST( 43, sll, 1024, 2048 ); - - TEST_PASSFAIL - -RVTEST_CODE_END - - .data -RVTEST_DATA_BEGIN - - TEST_DATA - -RVTEST_DATA_END diff --git a/picorv32_firmware/tests/sll.o b/picorv32_firmware/tests/sll.o deleted file mode 100644 index 5c94567e43224d8aeb2dca3e18bf95308b038a36..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4292 zcmb7IU1$_n6h5;*F;-b8+1UD5T`_G1+jMtlW0I0vUWv6D>iL?2(*-d+6c`N~`k|hy@_F=&mg!-_c4?@B8J9F=yIcxQySLWXD zJLlYQ&OP_e%*Ky*bi83%7MW(zeF_-SsYS|@@rJcjOY^8DN)(SqsilVOlNjC8QCgGu z0k*|-qOxjku&=ZEa7$o+P(m?ETtKweeV% z-1DV`yU*K3j>ubBYZyEMH>%Xbu z{rf(Q#|o^!TiNw}f15-6DC_T1c6r}%*55UeSiQQKx9iQlCz`;|uB?y8rr5tT@T(jq z_H5l+JloV5k4>|GN8nevOk64yif3b}Lz(^C0>7z6dwV=qA@{S=mcS?TA`9!=9Qf#w zS1Ug+oBf*tzpea!UJ3SZ2>kuZ@8^|de_P-$>-n5l)^abDT9l7alggYr2j2c!sBg2{ zKdiOD=Y#jV%W^MHJ7&Kf-dAtG`z_Zl!Jb5{jo7?}y@URADjp(z&Q#6fCoPJH>Zuq? z(4B_8kCbi!^JiWSVpaX(INMe6^?M(w`;A)el9_cuysD`e|M(mmbG)-RZn-OGUJB;u zd`vFSnp~zV_w&*VL0p+wmun;QR(VWweb)rB70cvM70-ElIh0Yq(kefmbG07J!>>t& z_viWQ*eB%T*MvgurP9)>cu!x~#;nuN#STILIgaNXcu%Wx_Un-d;ruREab>laPpwBX zg!R>_*ox(y6VBoBct3}12=!ZJa^SfC;KPCsg8wS`5cr6w&qv@l1wRG; zK=9MxYsLBt;GKeB03Q~d&&qd#e+_ zOW;eydV{k`c$--C2mGet)kV~l>lw@)I^KP(hno5acsz8xXDH{BBPWjckQbAt_qyNj zQ`k{MMh(qsSg(c_HMFXsO%17}9#eWu>rpGEv{XuKrL!r0`TI;2?URvupTF=pXj@EOuo}={~t>B1azpHZ9k79*mvOgp=V?3JYn7ef!v^ym3_c_9Wq~IJo)!3>z!98H zqq9QbjRGGOcv#>Ofv*ZYEARt>8}N*qdnE<#5cr6|!vYrs9%rlzH!198#_EqUx+m-n zco*2sSTtIKv99Mv#_N^6UD$gWw>Z3ZD*FLpA7Z>o*-r`k7~|KK{i?9fGTyB0WnqutOxamww;Ag?WEgKz_N=hK zBXF<4Ljs={c!V+k7(u%WT(?bOY8w3DSg!jp#@v7!dkq@s>FdVpkY9dBx^vysbQlln z|7Z!s;)s!cbcnbA9`0=#mhZLY=ox1{hVL7Ga4p3Ca464bAO8m9-&)M!@>;?OYi{&j z2IulUEsiy~@ra}7H`dESgk`tlVm*HL=i@S3fYkL2zR^Ym+(7)yt%~c!|3##Df^H`6 EUlb3DRsaA1 diff --git a/picorv32_firmware/tests/slli.S b/picorv32_firmware/tests/slli.S deleted file mode 100644 index a51eec9..0000000 --- a/picorv32_firmware/tests/slli.S +++ /dev/null @@ -1,68 +0,0 @@ -# See LICENSE for license details. - -#***************************************************************************** -# slli.S -#----------------------------------------------------------------------------- -# -# Test slli instruction. -# - -#include "riscv_test.h" -#include "test_macros.h" - -RVTEST_RV32U -RVTEST_CODE_BEGIN - - #------------------------------------------------------------- - # Arithmetic tests - #------------------------------------------------------------- - - TEST_IMM_OP( 2, slli, 0x00000001, 0x00000001, 0 ); - TEST_IMM_OP( 3, slli, 0x00000002, 0x00000001, 1 ); - TEST_IMM_OP( 4, slli, 0x00000080, 0x00000001, 7 ); - TEST_IMM_OP( 5, slli, 0x00004000, 0x00000001, 14 ); - TEST_IMM_OP( 6, slli, 0x80000000, 0x00000001, 31 ); - - TEST_IMM_OP( 7, slli, 0xffffffff, 0xffffffff, 0 ); - TEST_IMM_OP( 8, slli, 0xfffffffe, 0xffffffff, 1 ); - TEST_IMM_OP( 9, slli, 0xffffff80, 0xffffffff, 7 ); - TEST_IMM_OP( 10, slli, 0xffffc000, 0xffffffff, 14 ); - TEST_IMM_OP( 11, slli, 0x80000000, 0xffffffff, 31 ); - - TEST_IMM_OP( 12, slli, 0x21212121, 0x21212121, 0 ); - TEST_IMM_OP( 13, slli, 0x42424242, 0x21212121, 1 ); - TEST_IMM_OP( 14, slli, 0x90909080, 0x21212121, 7 ); - TEST_IMM_OP( 15, slli, 0x48484000, 0x21212121, 14 ); - TEST_IMM_OP( 16, slli, 0x80000000, 0x21212121, 31 ); - - #------------------------------------------------------------- - # Source/Destination tests - #------------------------------------------------------------- - - TEST_IMM_SRC1_EQ_DEST( 17, slli, 0x00000080, 0x00000001, 7 ); - - #------------------------------------------------------------- - # Bypassing tests - #------------------------------------------------------------- - - TEST_IMM_DEST_BYPASS( 18, 0, slli, 0x00000080, 0x00000001, 7 ); - TEST_IMM_DEST_BYPASS( 19, 1, slli, 0x00004000, 0x00000001, 14 ); - TEST_IMM_DEST_BYPASS( 20, 2, slli, 0x80000000, 0x00000001, 31 ); - - TEST_IMM_SRC1_BYPASS( 21, 0, slli, 0x00000080, 0x00000001, 7 ); - TEST_IMM_SRC1_BYPASS( 22, 1, slli, 0x00004000, 0x00000001, 14 ); - TEST_IMM_SRC1_BYPASS( 23, 2, slli, 0x80000000, 0x00000001, 31 ); - - TEST_IMM_ZEROSRC1( 24, slli, 0, 31 ); - TEST_IMM_ZERODEST( 25, slli, 33, 20 ); - - TEST_PASSFAIL - -RVTEST_CODE_END - - .data -RVTEST_DATA_BEGIN - - TEST_DATA - -RVTEST_DATA_END diff --git a/picorv32_firmware/tests/slli.o b/picorv32_firmware/tests/slli.o deleted file mode 100644 index 7a13bdbb9cdd4aedf2502401efda80190c970574..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2596 zcmb7FO=w(I6h3$UI>q{UnU`vsw02@zn?)V+CP~vm7enzUiy)y`a3Lhqmys0HbjZv? zQE(vcEMe*k610?n8^JCD{!GCx0wM?%&5#xZ7X}(33y}d`6p_a7ynFA=Nx+3?xc7YD z_s%=#-t+Ez^WKXSFDa$Snxa3c!-%%i`pQV;1}RMkXe>$OC6hFkB6kr!xSphe?AOo^ z)3w&|-OAkD6%G%RTQSyogyd3q1DfNK=VU4PxOqxz(7`=th=RJ+%Frn7IRy$nYM#__ zThw?3b)88HZZ-$B)=~|JYMwJq!H2B1c6E)`uIH2~SZVfajcaT{t5I;Pd0cBzjYpnS zr(oG?sPW@2;#PTm$8?;nvBv8=*2wnvhc!3Dbs9O~rDrmpv(EMVI@esR^}>a4DR;ti zHaP#0&b2Z%Zq@7Il7szi@&2CfT;n~Ck9$sw>mTmub`7MkelOa4-S)^;!SaUZ#n9WR z$7S*s6?w4?g|RF>eCpz3-OH>B+|8~|+!lFwMtfqrFFw{i9#TQ?=98V+mWpEc$7c{9 z^}nEk%;poFc&x$J@3HkK75aD3#&Evy2G(HXuuffjTH*O7Wt@)18f+}DGpbuw=wCc^ zTMB!`*{GpE8w!1hdG&(P>MH2oz<$=_IJa(?oJ@GBY%)x>65fGToXxK=zBA*2@xM_8 zz0~oDORXisl#G3VbN=g3*usBWe9v1%6vt0moDxw)wk;|;1k6L5q9Xu}}Ux4oj{tbAK=-0R4=LNq9 zJ|p-hcwO*cz*hx-2)-jY?|nto`vZJk@V~%+7yNJVqvC!%GAan30-qK9Q2SoO=~UFU zha*|8TB=m1=8IQLlq)Z=pPDbdRc(`*Yx5%wk?Z&h_tKB*6 z{2}9g5%^t!>jK|q+>gYtJ3{}N@v~ar7J3@z z&mGWuH)FH+(~M7O{jAVmWqeZW(?YK?<_{R`y3lV5ye9CMjI&WVCF1D+pvIJ|ynVG= zybNDm(0o>Zd07M02-UkcN&=6YA^4P;~Z@4(U!Jx9Dkp9y{9lZAD`QU7&aFm Y{eXq_+9co>cI}H>!y{DR>eXQ5wSs!QrecFd}{o8o) zwGssrl^1wSI9^?>`SCm^`Toz_Yq`^MEMK4E>wES6AF?L zyyiLoTu7XUts8q)Ie(+ecv853M@aLSQ<)PA@k-uqTFq4ocFjw{kH1ZYLrKm z^V0Y@?-J@)*`nho_58TLocl8GNz||MsE#ES`66~%F0uEN3NBVQ>iClO=2|TEkK(!J zGwlBe$8!vxDOHz8T#vE}N|klBxbfvV#Pyix`L)zyGdk}F)}zYxd)UVF-1u3o%Om!t z1m?G@J~kWq*Tu*6a1xl`N*S;H2kQOfdSuu?#m|WUc)W)b!5X7oLT-AmCV~x>OOS&HZ< zfwO||0$ymaf+7#F*HXlH0S^e?4SZ7Y1HdK0Uk1J+_^ZG(f*%H+6FdOEFZi3lj5^S5e)Sl`Xy zJ%VoqFABZ`{IcLa_;tbefd4G`KJYt&9|Yfy{|34#>IYxIVfkyo+r<12gC7$7DERw= z^V&`cJ_3G6@FMtXG2gerI|b*xa7^&`z|RT(G5Cz&6X1UdegV8y%0cLc5q z?BKa{+K>oZD`PXqZpKe*y-(;x##yb83;iNvSL;`Vev>hOpwMm!eSxtldIO$ad*5x0 z+jV?a=!Y10XnjEFXBqF-dP(S48RxWqUFdU+JGK6s(3`Lc9R6^ktz~TL(9ZZ7t#=E3 zkntX^7lb~+_*tz_3jLbEHwB&(xGL~{#{8j2>%ksuc}`<$8++?`F@F?&aa8xmEE*je z&f`_ZFQ&nKF;8tr@v!}mmO(7G2ASj;50CFj2><{9 diff --git a/picorv32_firmware/tests/slti.S b/picorv32_firmware/tests/slti.S deleted file mode 100644 index 730cbe2..0000000 --- a/picorv32_firmware/tests/slti.S +++ /dev/null @@ -1,70 +0,0 @@ -# See LICENSE for license details. - -#***************************************************************************** -# slti.S -#----------------------------------------------------------------------------- -# -# Test slti instruction. -# - -#include "riscv_test.h" -#include "test_macros.h" - -RVTEST_RV32U -RVTEST_CODE_BEGIN - - #------------------------------------------------------------- - # Arithmetic tests - #------------------------------------------------------------- - - TEST_IMM_OP( 2, slti, 0, 0x00000000, 0x000 ); - TEST_IMM_OP( 3, slti, 0, 0x00000001, 0x001 ); - TEST_IMM_OP( 4, slti, 1, 0x00000003, 0x007 ); - TEST_IMM_OP( 5, slti, 0, 0x00000007, 0x003 ); - - TEST_IMM_OP( 6, slti, 0, 0x00000000, 0x800 ); - TEST_IMM_OP( 7, slti, 1, 0x80000000, 0x000 ); - TEST_IMM_OP( 8, slti, 1, 0x80000000, 0x800 ); - - TEST_IMM_OP( 9, slti, 1, 0x00000000, 0x7ff ); - TEST_IMM_OP( 10, slti, 0, 0x7fffffff, 0x000 ); - TEST_IMM_OP( 11, slti, 0, 0x7fffffff, 0x7ff ); - - TEST_IMM_OP( 12, slti, 1, 0x80000000, 0x7ff ); - TEST_IMM_OP( 13, slti, 0, 0x7fffffff, 0x800 ); - - TEST_IMM_OP( 14, slti, 0, 0x00000000, 0xfff ); - TEST_IMM_OP( 15, slti, 1, 0xffffffff, 0x001 ); - TEST_IMM_OP( 16, slti, 0, 0xffffffff, 0xfff ); - - #------------------------------------------------------------- - # Source/Destination tests - #------------------------------------------------------------- - - TEST_IMM_SRC1_EQ_DEST( 17, sltiu, 1, 11, 13 ); - - #------------------------------------------------------------- - # Bypassing tests - #------------------------------------------------------------- - - TEST_IMM_DEST_BYPASS( 18, 0, slti, 0, 15, 10 ); - TEST_IMM_DEST_BYPASS( 19, 1, slti, 1, 10, 16 ); - TEST_IMM_DEST_BYPASS( 20, 2, slti, 0, 16, 9 ); - - TEST_IMM_SRC1_BYPASS( 21, 0, slti, 1, 11, 15 ); - TEST_IMM_SRC1_BYPASS( 22, 1, slti, 0, 17, 8 ); - TEST_IMM_SRC1_BYPASS( 23, 2, slti, 1, 12, 14 ); - - TEST_IMM_ZEROSRC1( 24, slti, 0, 0xfff ); - TEST_IMM_ZERODEST( 25, slti, 0x00ff00ff, 0xfff ); - - TEST_PASSFAIL - -RVTEST_CODE_END - - .data -RVTEST_DATA_BEGIN - - TEST_DATA - -RVTEST_DATA_END diff --git a/picorv32_firmware/tests/slti.o b/picorv32_firmware/tests/slti.o deleted file mode 100644 index f7449ab6651925eb6b9e808cf896b010888ab30b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2580 zcmb7FOK2Nc6unQsI5bU1meV?RN|ZVuFI=G++i|ngBK<5(F(rX43XU>SNT}inON*2S zB5)RkW+6Hun6?y&W?^U+hSFxyEDUX-(2ay02y{_HD0C5mpk9P7>Yn>P(zT(BJn`N= z=gfKczIpRzbo1@mca&1(nxem{&xke#%#|q}#%X}|&`gpjlT6Y~io7Mn@OF~MvOhpO zK-ap5x2xsa6}Cso%^2(4Bjzpi{g}HyOX2686A^jP(6yGQaJh3VqCB(;G!MQ4gNysqcg zyW9OWHhI3#+0ScV<@%$hmdmlm^$&_1c3o{=|7*71wwb@l^PzDq5BJ3D>hk;pMuV>F zkV1WEs}!xati4Dueyn z;T>Wx*Uqc((E7{9ODbwLNPBnt2VL%h3WwHTGJdSB)$P|Gb~)!1p6_1c@pSE|Rqy+H z>pZWpKS|?T>(z}~n|*I@ofU=i5s$KNf9lwucKiWtQ&jK1l4&}p$AqlK*Y-9d8X$96#CO zl+ccBPgJxIn7e6;4g!oj3iokf^WL$j=uM0(c=o0#3IN`76xUAye<*kXxFYzwz_$c{ zA9z{tv%vQS=Ui)ohrk)00BNwkNlt_C5 zx>USUHh9v6DHEnmIBCL+32&Kj$^<`eqioRKCsS+ho4Y=G%0>%@^2wfz21# ze1Xju*nGh>Rf^Rrbdu8r`%1f#(D+3tSiYj=(DdKNOfhBrYePA&2=qI6Nfqgun%X&j@^3 z;2Q!jGd_YMX!nHvGvham-WK{6<1wQX&Z1k-Fyo^}KPvPB<6}mj6?&O5f56bL3;k1p zn*!fsoYi*P0#1(`Ou6dES8K%!h_yu%FFUkYDi`qz@PWTrtQ9GD0f*%US{7d1F4@Pf zzqQX%+ckSkXcPkDg1zt<6Mn@+J|aAyukm-BZO06|yAII#Tiqgu& zkFYJGBb61ix&AB_qva6W__#t;h$HF6QX+FD1|3U~d#3chvfIW!5sx*Kd#?1ZviBML zY&@1Bceu1y*~{8K1A8aAL&{z(*c7)a7Jo)DR)MdJ+%HSJ`I=$@EIz+D$k+C&Pg7f&K3Ue!m_|`G?s5R^T^vg-H2F*uOpSo7&L3*f`(+n^y|Qj-l=bzqUc};PQre zY=Zq;1HZ2A_lb$(V5}}4n_~Z#z;9{`&lU$aG{<9Q_HPdSrnVXQd%NPX3i~$&ep4Iw zjV$+UX=C7{hu*sRwb|@nANXzM_iIbAe_i13Q~sE#t(pDpfxoQ%rnU_GTLXV(Hdxb6 z3;Uymdm6WJ&r{xh;oK)FYigOW+^k#&8$X!wjU+nZ4`+NlbnF=E& z(^}8Hv!M2j_*NPNx+-r1LN{GyMWdj5-YWb?Zp z@rbJ#j}&WU>`lD;zd4WFdFlvPeX|gS@lTF0MZAcFZ?vcmnh!NBS`5)>5YaC}Hw%6l z`UbwA)UYT8vCSaj+o8JzXP^fJZ-pKb{5JHM;Jwf{1b+y9U$6^Z=YN4(bP&8oa1Ojp z@TcGdf{%kw3jP8-Dj4fYlY+kn-xd5FID%(K4U4{qXcT-A+#&d9aJS%V;DX@az~=-{ zgU1E`3BE4)4!9!tZ*U@vlQ;O+1<@YC|ALPS4&z=%1Y+e2PViayGId`M|W zO=&f?sA;X5TGiC1rgk+YoAsR3b4t%TQ&Oi&>Rd^kEUB|4b-JX^m(uxCI$uiXOX++m zoiC;HrF6cO&X>~pQaYcb^Eo=7qw_gBpQH0RI-jHSIXa)C^Eo>YcfvfHe6AJVKd%AOJSZq}QW zy-(Or2z^fIQK7F3J;|DXj9@fiFV}BYnwoN-9L{I=W6t-h`G8UVJ%_S*9rDYsJDbl^ z(|$at|6?Q&i>*ic(IH;`Wd@+p7H=%oI-`*Cb@&Z~bwkPC^&AJ2_gjne!R3ukk&6u` z-x_Fc>(k;m2M?aHMg76~GDyN{U&q1u_}QO}!{mabp=ac89+ijf_?cT3SHS;WB-x>d H`P}~iEot$r diff --git a/picorv32_firmware/tests/srai.S b/picorv32_firmware/tests/srai.S deleted file mode 100644 index 4638190..0000000 --- a/picorv32_firmware/tests/srai.S +++ /dev/null @@ -1,68 +0,0 @@ -# See LICENSE for license details. - -#***************************************************************************** -# srai.S -#----------------------------------------------------------------------------- -# -# Test srai instruction. -# - -#include "riscv_test.h" -#include "test_macros.h" - -RVTEST_RV32U -RVTEST_CODE_BEGIN - - #------------------------------------------------------------- - # Arithmetic tests - #------------------------------------------------------------- - - TEST_IMM_OP( 2, srai, 0x00000000, 0x00000000, 0 ); - TEST_IMM_OP( 3, srai, 0xc0000000, 0x80000000, 1 ); - TEST_IMM_OP( 4, srai, 0xff000000, 0x80000000, 7 ); - TEST_IMM_OP( 5, srai, 0xfffe0000, 0x80000000, 14 ); - TEST_IMM_OP( 6, srai, 0xffffffff, 0x80000001, 31 ); - - TEST_IMM_OP( 7, srai, 0x7fffffff, 0x7fffffff, 0 ); - TEST_IMM_OP( 8, srai, 0x3fffffff, 0x7fffffff, 1 ); - TEST_IMM_OP( 9, srai, 0x00ffffff, 0x7fffffff, 7 ); - TEST_IMM_OP( 10, srai, 0x0001ffff, 0x7fffffff, 14 ); - TEST_IMM_OP( 11, srai, 0x00000000, 0x7fffffff, 31 ); - - TEST_IMM_OP( 12, srai, 0x81818181, 0x81818181, 0 ); - TEST_IMM_OP( 13, srai, 0xc0c0c0c0, 0x81818181, 1 ); - TEST_IMM_OP( 14, srai, 0xff030303, 0x81818181, 7 ); - TEST_IMM_OP( 15, srai, 0xfffe0606, 0x81818181, 14 ); - TEST_IMM_OP( 16, srai, 0xffffffff, 0x81818181, 31 ); - - #------------------------------------------------------------- - # Source/Destination tests - #------------------------------------------------------------- - - TEST_IMM_SRC1_EQ_DEST( 17, srai, 0xff000000, 0x80000000, 7 ); - - #------------------------------------------------------------- - # Bypassing tests - #------------------------------------------------------------- - - TEST_IMM_DEST_BYPASS( 18, 0, srai, 0xff000000, 0x80000000, 7 ); - TEST_IMM_DEST_BYPASS( 19, 1, srai, 0xfffe0000, 0x80000000, 14 ); - TEST_IMM_DEST_BYPASS( 20, 2, srai, 0xffffffff, 0x80000001, 31 ); - - TEST_IMM_SRC1_BYPASS( 21, 0, srai, 0xff000000, 0x80000000, 7 ); - TEST_IMM_SRC1_BYPASS( 22, 1, srai, 0xfffe0000, 0x80000000, 14 ); - TEST_IMM_SRC1_BYPASS( 23, 2, srai, 0xffffffff, 0x80000001, 31 ); - - TEST_IMM_ZEROSRC1( 24, srai, 0, 31 ); - TEST_IMM_ZERODEST( 25, srai, 33, 20 ); -# - TEST_PASSFAIL - -RVTEST_CODE_END - - .data -RVTEST_DATA_BEGIN - - TEST_DATA - -RVTEST_DATA_END diff --git a/picorv32_firmware/tests/srai.o b/picorv32_firmware/tests/srai.o deleted file mode 100644 index 87b975b900993a79720aace999df616d7e59d6c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2648 zcmb7GO=w(I6h3eMl42a*^d*`mv7MUMM%0iuNtzUjJfUhAK|(?3B9Kg9M_NqNAv24L z3#X(zWeC0?L5mjL2)Za(ji8GGTM!hPM_Lfv1R5cWAOpH`k@%haGjm#S;R)}a?>pz* zbI&{X-Zy#g)tT2E#~~{Y{Y4!{)PF#GCX^bXZt9|`G?AB1(^Q7s73lDTG!5s!g{_aS zwvOyqmW!7;JW6jR*v?PHJf*!EzXrSPNpgo>-V$k}=&%C=x%;Q7b3y|vG4AxAB$^PDn;H{;=sPpuhfUyZ^~ zV%!)lmnoAMW?E4GP!e z!Hy4g{Mu+l^=yxqZF2pGIzFx=xgXVE9`mwWT>sM@pYBCeUs~|8Ev~<>##NS+ZtxM{sT6K^F=Z0uyLwZUVp*C`=@Oj zdQNt2J{#@$gLdt*gZ)WHvv$8~nBR0FauZ%NFnhR)`kGES&`9E}yHR>J71Lr^*VPO_ZA<8~`Z=LKFAxF+zrz;^_03cM?DH}=%#&kKB7;PV1k1zr{S3xR(S z_&3H!u^?ny*i$%X?z7tNGB)ox&3IVb&j|Y*<73)>N!V{NKCbPn!hVM_f50FOVQ&h& zE$|NGyb7mj+_Bt<#xz=a=SsDB0lK=Z^(BjzON&KZ0Y2~-i`62HUch1bACgBbT0&;q z)wlL^`+gI?*jfgm7zditP#4ipn8-(j=d+K$fupIiPn&*lPD0RuJ(sD(LT8Mlohe2zC_y diff --git a/picorv32_firmware/tests/srl.S b/picorv32_firmware/tests/srl.S deleted file mode 100644 index 35cc4c7..0000000 --- a/picorv32_firmware/tests/srl.S +++ /dev/null @@ -1,90 +0,0 @@ -# See LICENSE for license details. - -#***************************************************************************** -# srl.S -#----------------------------------------------------------------------------- -# -# Test srl instruction. -# - -#include "riscv_test.h" -#include "test_macros.h" - -RVTEST_RV32U -RVTEST_CODE_BEGIN - - #------------------------------------------------------------- - # Arithmetic tests - #------------------------------------------------------------- - - TEST_RR_OP( 2, srl, 0xffff8000, 0xffff8000, 0 ); - TEST_RR_OP( 3, srl, 0x7fffc000, 0xffff8000, 1 ); - TEST_RR_OP( 4, srl, 0x01ffff00, 0xffff8000, 7 ); - TEST_RR_OP( 5, srl, 0x0003fffe, 0xffff8000, 14 ); - TEST_RR_OP( 6, srl, 0x0001ffff, 0xffff8001, 15 ); - - TEST_RR_OP( 7, srl, 0xffffffff, 0xffffffff, 0 ); - TEST_RR_OP( 8, srl, 0x7fffffff, 0xffffffff, 1 ); - TEST_RR_OP( 9, srl, 0x01ffffff, 0xffffffff, 7 ); - TEST_RR_OP( 10, srl, 0x0003ffff, 0xffffffff, 14 ); - TEST_RR_OP( 11, srl, 0x00000001, 0xffffffff, 31 ); - - TEST_RR_OP( 12, srl, 0x21212121, 0x21212121, 0 ); - TEST_RR_OP( 13, srl, 0x10909090, 0x21212121, 1 ); - TEST_RR_OP( 14, srl, 0x00424242, 0x21212121, 7 ); - TEST_RR_OP( 15, srl, 0x00008484, 0x21212121, 14 ); - TEST_RR_OP( 16, srl, 0x00000000, 0x21212121, 31 ); - - # Verify that shifts only use bottom five bits - - TEST_RR_OP( 17, srl, 0x21212121, 0x21212121, 0xffffffe0 ); - TEST_RR_OP( 18, srl, 0x10909090, 0x21212121, 0xffffffe1 ); - TEST_RR_OP( 19, srl, 0x00424242, 0x21212121, 0xffffffe7 ); - TEST_RR_OP( 20, srl, 0x00008484, 0x21212121, 0xffffffee ); - TEST_RR_OP( 21, srl, 0x00000000, 0x21212121, 0xffffffff ); - - #------------------------------------------------------------- - # Source/Destination tests - #------------------------------------------------------------- - - TEST_RR_SRC1_EQ_DEST( 22, srl, 0x7fffc000, 0xffff8000, 1 ); - TEST_RR_SRC2_EQ_DEST( 23, srl, 0x0003fffe, 0xffff8000, 14 ); - TEST_RR_SRC12_EQ_DEST( 24, srl, 0, 7 ); - - #------------------------------------------------------------- - # Bypassing tests - #------------------------------------------------------------- - - TEST_RR_DEST_BYPASS( 25, 0, srl, 0x7fffc000, 0xffff8000, 1 ); - TEST_RR_DEST_BYPASS( 26, 1, srl, 0x0003fffe, 0xffff8000, 14 ); - TEST_RR_DEST_BYPASS( 27, 2, srl, 0x0001ffff, 0xffff8000, 15 ); - - TEST_RR_SRC12_BYPASS( 28, 0, 0, srl, 0x7fffc000, 0xffff8000, 1 ); - TEST_RR_SRC12_BYPASS( 29, 0, 1, srl, 0x01ffff00, 0xffff8000, 7 ); - TEST_RR_SRC12_BYPASS( 30, 0, 2, srl, 0x0001ffff, 0xffff8000, 15 ); - TEST_RR_SRC12_BYPASS( 31, 1, 0, srl, 0x7fffc000, 0xffff8000, 1 ); - TEST_RR_SRC12_BYPASS( 32, 1, 1, srl, 0x01ffff00, 0xffff8000, 7 ); - TEST_RR_SRC12_BYPASS( 33, 2, 0, srl, 0x0001ffff, 0xffff8000, 15 ); - - TEST_RR_SRC21_BYPASS( 34, 0, 0, srl, 0x7fffc000, 0xffff8000, 1 ); - TEST_RR_SRC21_BYPASS( 35, 0, 1, srl, 0x01ffff00, 0xffff8000, 7 ); - TEST_RR_SRC21_BYPASS( 36, 0, 2, srl, 0x0001ffff, 0xffff8000, 15 ); - TEST_RR_SRC21_BYPASS( 37, 1, 0, srl, 0x7fffc000, 0xffff8000, 1 ); - TEST_RR_SRC21_BYPASS( 38, 1, 1, srl, 0x01ffff00, 0xffff8000, 7 ); - TEST_RR_SRC21_BYPASS( 39, 2, 0, srl, 0x0001ffff, 0xffff8000, 15 ); - - TEST_RR_ZEROSRC1( 40, srl, 0, 15 ); - TEST_RR_ZEROSRC2( 41, srl, 32, 32 ); - TEST_RR_ZEROSRC12( 42, srl, 0 ); - TEST_RR_ZERODEST( 43, srl, 1024, 2048 ); - - TEST_PASSFAIL - -RVTEST_CODE_END - - .data -RVTEST_DATA_BEGIN - - TEST_DATA - -RVTEST_DATA_END diff --git a/picorv32_firmware/tests/srl.o b/picorv32_firmware/tests/srl.o deleted file mode 100644 index 347b6bec6f957fd26d5103040600f6cdd0f5c03b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4372 zcmb7IU1$_n6h5;*F}8MGv)bAu=!(`_sv*0xF-eVe{i_zOja8{d!Nf78#i&bmA5tnc zU>}N=5ZoZa1{+!*0xczAt%3Rwkb<=Ff`J_NKNRLVm8P^g%GXYRc-XZ?d-nYrJ0 z&bi;7IdksJ#1oshzhPMxnPJgi6fmOebCoCUO)IFHW>IsLC?1Vca}~u-Vs=kOX=&mI z*cQ;S^5U6XPd62!(;>F;ak+11CJxbyr378>2euRB4wm*QdraAXojDP=8_69iy{GJ1 zWw$9*=(o#pJ45cd(!0txt$h(H^#2LHc5;VHd)Qa#i&5MvYkvs-2k>{We^-IZejWuI z*v^tWVC*^%oBGt6K61~LcB(Zp7uFl#{NGkSnG5?y$UR$nOZmzcUvt4mPWBk*zwL5j z$r9vPz^IBi|pSL_;pS@HsBf?mc{L9_HPdSI(kPz@DA3A#Q1od-&L0PClcL9D7}9DAT5z6SCBZ;n`Q?bNDZ zP1)-~Z_UH&V!Y1u=9uL!ntCNzr}Hv7J#TWFK>nqdgSafQHrJ^le}BIeQJ>OFL44VZ ze`Jk!4JMaq3;S=0zlQU+9?HkBQJM7@SH?ajCr{t(VG2RNu40Y%8@g8Jnk#aOg>e60 z;5D2J_d&%q`}IkLP@e@VF01bGQ|r?hLjG|TU-sjlUY`u-KiA~Kv5(~A*QcHJpELQG z*vIRe`gE}VY?BkmnspV|Tv4Aa*C&eS4LLjgUJs%FVWW^!!v053;F%S2YfIsa?H`}@L#}B3qA!tD)?{UR|LNeepm26!0W>}d4s<`h;|G9FZgl6!^r(x!Jh@67M$O! zb0SKOa6jw7GlDM#&kO!4_^{v(_@v-#z)AGWM(~w_Zv*cTd>8nj;QPQw1$V)(2!0rR zQt%vjeN~WuFZhJ0*C*ij1pgE~A+G-v_+G&W!21M03qB?|_s$)`zXFem>mLQ*B=~pW zy@Fo?9}%2;uPFFc@QAp+pTQdiFM%HtJm^*Af%|t0elubW8uDGa{DGsLN4lsX+r#sL zqg}mupBy@Nw2Qo$6usa1VYkALn$l`&QqyWRHLIybO|5E5HtIR4=aincQc_DLwN_G# zCAC^o%O$m5O6#SxUP|kwv|dW!q|_O6#Sxo}={~t>)z~2izDezr^Bj`t?lMuK?;JpI#{x$JK0*?!PUEse3o{xQQ)}{sCEpS%g&jh|8 z@VLM?8SBE`5%y|417hlrJX*+D*Db@i2?fAt7xr$(tChW1*oPQ5EBmOhPcm*%_FKY! zpE195F{*J>&F`*c{F<`233~_QHOih9_S1~plzm9p#~H6x_G`j^kMZlueqY$@(L1qq z%D#fJuETc58D-xu?0t;aEBk=3Ul4d);A;Zk5%?}+{use%K`+nSs4z9;K01=`Jcv2p zqvj6`>gnq4#N&`3eup~qoz!p;8})yT1Y*%{WL`IX``ZiwMp?X3r*TG68pH?J9Nagg z?5*cG{svpFIb7bz3N1Dmy_LXR)+fbrPCR%iB82tgEl5R&a=CB-ydviqPY zbRj+z3`=l|h=vl-2SFbK{-j_Z0!0uEvP)VJ6kMo6AEYekgNStf&fI%MJ;rgqw#&_CSR>l5G@G82rr^EWQ#$6-_7BY~o-<0p2el`4tU%ii z#lniy@SG_MHfkqzypDK+!peQ*n5AId#LF&)wFc&5n0tV^dCq?#q(-!7=rj;3aQZ35$#b?S_^|fac6w+iEW5qYeP)0w zkN0}c4(A_i&tdQD>n`rC%X6v}T(2Ez&td%$GJrM*v1Fh589#{oZm=(bE|3;T&jFt2>w0zy5M`@JA(fNUKRWaJhUc}#Kd_u?9MErBc`~idA z6!Bew>jMAEI33Ap9Pe1qh{lvDzImyXy8vHW(SFgQmHbi;uK*wTg-c-c^`6AV`S{%Ozj!tmApL{F25b^=3wsXe>L?=13yfLazp~)UqW}N^ diff --git a/picorv32_firmware/tests/sub.S b/picorv32_firmware/tests/sub.S deleted file mode 100644 index ad56e3e..0000000 --- a/picorv32_firmware/tests/sub.S +++ /dev/null @@ -1,83 +0,0 @@ -# See LICENSE for license details. - -#***************************************************************************** -# sub.S -#----------------------------------------------------------------------------- -# -# Test sub instruction. -# - -#include "riscv_test.h" -#include "test_macros.h" - -RVTEST_RV32U -RVTEST_CODE_BEGIN - - #------------------------------------------------------------- - # Arithmetic tests - #------------------------------------------------------------- - - TEST_RR_OP( 2, sub, 0x00000000, 0x00000000, 0x00000000 ); - TEST_RR_OP( 3, sub, 0x00000000, 0x00000001, 0x00000001 ); - TEST_RR_OP( 4, sub, 0xfffffffc, 0x00000003, 0x00000007 ); - - TEST_RR_OP( 5, sub, 0x00008000, 0x00000000, 0xffff8000 ); - TEST_RR_OP( 6, sub, 0x80000000, 0x80000000, 0x00000000 ); - TEST_RR_OP( 7, sub, 0x80008000, 0x80000000, 0xffff8000 ); - - TEST_RR_OP( 8, sub, 0xffff8001, 0x00000000, 0x00007fff ); - TEST_RR_OP( 9, sub, 0x7fffffff, 0x7fffffff, 0x00000000 ); - TEST_RR_OP( 10, sub, 0x7fff8000, 0x7fffffff, 0x00007fff ); - - TEST_RR_OP( 11, sub, 0x7fff8001, 0x80000000, 0x00007fff ); - TEST_RR_OP( 12, sub, 0x80007fff, 0x7fffffff, 0xffff8000 ); - - TEST_RR_OP( 13, sub, 0x00000001, 0x00000000, 0xffffffff ); - TEST_RR_OP( 14, sub, 0xfffffffe, 0xffffffff, 0x00000001 ); - TEST_RR_OP( 15, sub, 0x00000000, 0xffffffff, 0xffffffff ); - - #------------------------------------------------------------- - # Source/Destination tests - #------------------------------------------------------------- - - TEST_RR_SRC1_EQ_DEST( 16, sub, 2, 13, 11 ); - TEST_RR_SRC2_EQ_DEST( 17, sub, 3, 14, 11 ); - TEST_RR_SRC12_EQ_DEST( 18, sub, 0, 13 ); - - #------------------------------------------------------------- - # Bypassing tests - #------------------------------------------------------------- - - TEST_RR_DEST_BYPASS( 19, 0, sub, 2, 13, 11 ); - TEST_RR_DEST_BYPASS( 20, 1, sub, 3, 14, 11 ); - TEST_RR_DEST_BYPASS( 21, 2, sub, 4, 15, 11 ); - - TEST_RR_SRC12_BYPASS( 22, 0, 0, sub, 2, 13, 11 ); - TEST_RR_SRC12_BYPASS( 23, 0, 1, sub, 3, 14, 11 ); - TEST_RR_SRC12_BYPASS( 24, 0, 2, sub, 4, 15, 11 ); - TEST_RR_SRC12_BYPASS( 25, 1, 0, sub, 2, 13, 11 ); - TEST_RR_SRC12_BYPASS( 26, 1, 1, sub, 3, 14, 11 ); - TEST_RR_SRC12_BYPASS( 27, 2, 0, sub, 4, 15, 11 ); - - TEST_RR_SRC21_BYPASS( 28, 0, 0, sub, 2, 13, 11 ); - TEST_RR_SRC21_BYPASS( 29, 0, 1, sub, 3, 14, 11 ); - TEST_RR_SRC21_BYPASS( 30, 0, 2, sub, 4, 15, 11 ); - TEST_RR_SRC21_BYPASS( 31, 1, 0, sub, 2, 13, 11 ); - TEST_RR_SRC21_BYPASS( 32, 1, 1, sub, 3, 14, 11 ); - TEST_RR_SRC21_BYPASS( 33, 2, 0, sub, 4, 15, 11 ); - - TEST_RR_ZEROSRC1( 34, sub, 15, -15 ); - TEST_RR_ZEROSRC2( 35, sub, 32, 32 ); - TEST_RR_ZEROSRC12( 36, sub, 0 ); - TEST_RR_ZERODEST( 37, sub, 16, 30 ); - - TEST_PASSFAIL - -RVTEST_CODE_END - - .data -RVTEST_DATA_BEGIN - - TEST_DATA - -RVTEST_DATA_END diff --git a/picorv32_firmware/tests/sub.o b/picorv32_firmware/tests/sub.o deleted file mode 100644 index f6beb12292f5008cb78a9299a7bd0623f69655aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3904 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 diff --git a/picorv32_firmware/tests/test_macros.h b/picorv32_firmware/tests/test_macros.h deleted file mode 100644 index 05ed7c8..0000000 --- a/picorv32_firmware/tests/test_macros.h +++ /dev/null @@ -1,585 +0,0 @@ -// See LICENSE for license details. - -#ifndef __TEST_MACROS_SCALAR_H -#define __TEST_MACROS_SCALAR_H - - -#----------------------------------------------------------------------- -# Helper macros -#----------------------------------------------------------------------- - -#define TEST_CASE( testnum, testreg, correctval, code... ) \ -test_ ## testnum: \ - code; \ - li x29, correctval; \ - li TESTNUM, testnum; \ - bne testreg, x29, fail; - -# We use a macro hack to simpify code generation for various numbers -# of bubble cycles. - -#define TEST_INSERT_NOPS_0 -#define TEST_INSERT_NOPS_1 nop; TEST_INSERT_NOPS_0 -#define TEST_INSERT_NOPS_2 nop; TEST_INSERT_NOPS_1 -#define TEST_INSERT_NOPS_3 nop; TEST_INSERT_NOPS_2 -#define TEST_INSERT_NOPS_4 nop; TEST_INSERT_NOPS_3 -#define TEST_INSERT_NOPS_5 nop; TEST_INSERT_NOPS_4 -#define TEST_INSERT_NOPS_6 nop; TEST_INSERT_NOPS_5 -#define TEST_INSERT_NOPS_7 nop; TEST_INSERT_NOPS_6 -#define TEST_INSERT_NOPS_8 nop; TEST_INSERT_NOPS_7 -#define TEST_INSERT_NOPS_9 nop; TEST_INSERT_NOPS_8 -#define TEST_INSERT_NOPS_10 nop; TEST_INSERT_NOPS_9 - - -#----------------------------------------------------------------------- -# RV64UI MACROS -#----------------------------------------------------------------------- - -#----------------------------------------------------------------------- -# Tests for instructions with immediate operand -#----------------------------------------------------------------------- - -#define SEXT_IMM(x) ((x) | (-(((x) >> 11) & 1) << 11)) - -#define TEST_IMM_OP( testnum, inst, result, val1, imm ) \ - TEST_CASE( testnum, x3, result, \ - li x1, val1; \ - inst x3, x1, SEXT_IMM(imm); \ - ) - -#define TEST_IMM_SRC1_EQ_DEST( testnum, inst, result, val1, imm ) \ - TEST_CASE( testnum, x1, result, \ - li x1, val1; \ - inst x1, x1, SEXT_IMM(imm); \ - ) - -#define TEST_IMM_DEST_BYPASS( testnum, nop_cycles, inst, result, val1, imm ) \ - TEST_CASE( testnum, x6, result, \ - li x4, 0; \ -1: li x1, val1; \ - inst x3, x1, SEXT_IMM(imm); \ - TEST_INSERT_NOPS_ ## nop_cycles \ - addi x6, x3, 0; \ - addi x4, x4, 1; \ - li x5, 2; \ - bne x4, x5, 1b \ - ) - -#define TEST_IMM_SRC1_BYPASS( testnum, nop_cycles, inst, result, val1, imm ) \ - TEST_CASE( testnum, x3, result, \ - li x4, 0; \ -1: li x1, val1; \ - TEST_INSERT_NOPS_ ## nop_cycles \ - inst x3, x1, SEXT_IMM(imm); \ - addi x4, x4, 1; \ - li x5, 2; \ - bne x4, x5, 1b \ - ) - -#define TEST_IMM_ZEROSRC1( testnum, inst, result, imm ) \ - TEST_CASE( testnum, x1, result, \ - inst x1, x0, SEXT_IMM(imm); \ - ) - -#define TEST_IMM_ZERODEST( testnum, inst, val1, imm ) \ - TEST_CASE( testnum, x0, 0, \ - li x1, val1; \ - inst x0, x1, SEXT_IMM(imm); \ - ) - -#----------------------------------------------------------------------- -# Tests for vector config instructions -#----------------------------------------------------------------------- - -#define TEST_VSETCFGIVL( testnum, nxpr, nfpr, bank, vl, result ) \ - TEST_CASE( testnum, x1, result, \ - li x1, (bank << 12); \ - vsetcfg x1,nxpr,nfpr; \ - li x1, vl; \ - vsetvl x1,x1; \ - ) - -#define TEST_VVCFG( testnum, nxpr, nfpr, bank, vl, result ) \ - TEST_CASE( testnum, x1, result, \ - li x1, (bank << 12) | (nfpr << 6) | nxpr; \ - vsetcfg x1; \ - li x1, vl; \ - vsetvl x1,x1; \ - ) - -#define TEST_VSETVL( testnum, nxpr, nfpr, bank, vl, result ) \ - TEST_CASE( testnum, x1, result, \ - li x1, (bank << 12); \ - vsetcfg x1,nxpr,nfpr; \ - li x1, vl; \ - vsetvl x1, x1; \ - ) - -#----------------------------------------------------------------------- -# Tests for an instruction with register operands -#----------------------------------------------------------------------- - -#define TEST_R_OP( testnum, inst, result, val1 ) \ - TEST_CASE( testnum, x3, result, \ - li x1, val1; \ - inst x3, x1; \ - ) - -#define TEST_R_SRC1_EQ_DEST( testnum, inst, result, val1 ) \ - TEST_CASE( testnum, x1, result, \ - li x1, val1; \ - inst x1, x1; \ - ) - -#define TEST_R_DEST_BYPASS( testnum, nop_cycles, inst, result, val1 ) \ - TEST_CASE( testnum, x6, result, \ - li x4, 0; \ -1: li x1, val1; \ - inst x3, x1; \ - TEST_INSERT_NOPS_ ## nop_cycles \ - addi x6, x3, 0; \ - addi x4, x4, 1; \ - li x5, 2; \ - bne x4, x5, 1b \ - ) - -#----------------------------------------------------------------------- -# Tests for an instruction with register-register operands -#----------------------------------------------------------------------- - -#define TEST_RR_OP( testnum, inst, result, val1, val2 ) \ - TEST_CASE( testnum, x3, result, \ - li x1, val1; \ - li x2, val2; \ - inst x3, x1, x2; \ - ) - -#define TEST_RR_SRC1_EQ_DEST( testnum, inst, result, val1, val2 ) \ - TEST_CASE( testnum, x1, result, \ - li x1, val1; \ - li x2, val2; \ - inst x1, x1, x2; \ - ) - -#define TEST_RR_SRC2_EQ_DEST( testnum, inst, result, val1, val2 ) \ - TEST_CASE( testnum, x2, result, \ - li x1, val1; \ - li x2, val2; \ - inst x2, x1, x2; \ - ) - -#define TEST_RR_SRC12_EQ_DEST( testnum, inst, result, val1 ) \ - TEST_CASE( testnum, x1, result, \ - li x1, val1; \ - inst x1, x1, x1; \ - ) - -#define TEST_RR_DEST_BYPASS( testnum, nop_cycles, inst, result, val1, val2 ) \ - TEST_CASE( testnum, x6, result, \ - li x4, 0; \ -1: li x1, val1; \ - li x2, val2; \ - inst x3, x1, x2; \ - TEST_INSERT_NOPS_ ## nop_cycles \ - addi x6, x3, 0; \ - addi x4, x4, 1; \ - li x5, 2; \ - bne x4, x5, 1b \ - ) - -#define TEST_RR_SRC12_BYPASS( testnum, src1_nops, src2_nops, inst, result, val1, val2 ) \ - TEST_CASE( testnum, x3, result, \ - li x4, 0; \ -1: li x1, val1; \ - TEST_INSERT_NOPS_ ## src1_nops \ - li x2, val2; \ - TEST_INSERT_NOPS_ ## src2_nops \ - inst x3, x1, x2; \ - addi x4, x4, 1; \ - li x5, 2; \ - bne x4, x5, 1b \ - ) - -#define TEST_RR_SRC21_BYPASS( testnum, src1_nops, src2_nops, inst, result, val1, val2 ) \ - TEST_CASE( testnum, x3, result, \ - li x4, 0; \ -1: li x2, val2; \ - TEST_INSERT_NOPS_ ## src1_nops \ - li x1, val1; \ - TEST_INSERT_NOPS_ ## src2_nops \ - inst x3, x1, x2; \ - addi x4, x4, 1; \ - li x5, 2; \ - bne x4, x5, 1b \ - ) - -#define TEST_RR_ZEROSRC1( testnum, inst, result, val ) \ - TEST_CASE( testnum, x2, result, \ - li x1, val; \ - inst x2, x0, x1; \ - ) - -#define TEST_RR_ZEROSRC2( testnum, inst, result, val ) \ - TEST_CASE( testnum, x2, result, \ - li x1, val; \ - inst x2, x1, x0; \ - ) - -#define TEST_RR_ZEROSRC12( testnum, inst, result ) \ - TEST_CASE( testnum, x1, result, \ - inst x1, x0, x0; \ - ) - -#define TEST_RR_ZERODEST( testnum, inst, val1, val2 ) \ - TEST_CASE( testnum, x0, 0, \ - li x1, val1; \ - li x2, val2; \ - inst x0, x1, x2; \ - ) - -#----------------------------------------------------------------------- -# Test memory instructions -#----------------------------------------------------------------------- - -#define TEST_LD_OP( testnum, inst, result, offset, base ) \ - TEST_CASE( testnum, x3, result, \ - la x1, base; \ - inst x3, offset(x1); \ - ) - -#define TEST_ST_OP( testnum, load_inst, store_inst, result, offset, base ) \ - TEST_CASE( testnum, x3, result, \ - la x1, base; \ - li x2, result; \ - store_inst x2, offset(x1); \ - load_inst x3, offset(x1); \ - ) - -#define TEST_LD_DEST_BYPASS( testnum, nop_cycles, inst, result, offset, base ) \ -test_ ## testnum: \ - li TESTNUM, testnum; \ - li x4, 0; \ -1: la x1, base; \ - inst x3, offset(x1); \ - TEST_INSERT_NOPS_ ## nop_cycles \ - addi x6, x3, 0; \ - li x29, result; \ - bne x6, x29, fail; \ - addi x4, x4, 1; \ - li x5, 2; \ - bne x4, x5, 1b; \ - -#define TEST_LD_SRC1_BYPASS( testnum, nop_cycles, inst, result, offset, base ) \ -test_ ## testnum: \ - li TESTNUM, testnum; \ - li x4, 0; \ -1: la x1, base; \ - TEST_INSERT_NOPS_ ## nop_cycles \ - inst x3, offset(x1); \ - li x29, result; \ - bne x3, x29, fail; \ - addi x4, x4, 1; \ - li x5, 2; \ - bne x4, x5, 1b \ - -#define TEST_ST_SRC12_BYPASS( testnum, src1_nops, src2_nops, load_inst, store_inst, result, offset, base ) \ -test_ ## testnum: \ - li TESTNUM, testnum; \ - li x4, 0; \ -1: li x1, result; \ - TEST_INSERT_NOPS_ ## src1_nops \ - la x2, base; \ - TEST_INSERT_NOPS_ ## src2_nops \ - store_inst x1, offset(x2); \ - load_inst x3, offset(x2); \ - li x29, result; \ - bne x3, x29, fail; \ - addi x4, x4, 1; \ - li x5, 2; \ - bne x4, x5, 1b \ - -#define TEST_ST_SRC21_BYPASS( testnum, src1_nops, src2_nops, load_inst, store_inst, result, offset, base ) \ -test_ ## testnum: \ - li TESTNUM, testnum; \ - li x4, 0; \ -1: la x2, base; \ - TEST_INSERT_NOPS_ ## src1_nops \ - li x1, result; \ - TEST_INSERT_NOPS_ ## src2_nops \ - store_inst x1, offset(x2); \ - load_inst x3, offset(x2); \ - li x29, result; \ - bne x3, x29, fail; \ - addi x4, x4, 1; \ - li x5, 2; \ - bne x4, x5, 1b \ - -#----------------------------------------------------------------------- -# Test branch instructions -#----------------------------------------------------------------------- - -#define TEST_BR1_OP_TAKEN( testnum, inst, val1 ) \ -test_ ## testnum: \ - li TESTNUM, testnum; \ - li x1, val1; \ - inst x1, 2f; \ - bne x0, TESTNUM, fail; \ -1: bne x0, TESTNUM, 3f; \ -2: inst x1, 1b; \ - bne x0, TESTNUM, fail; \ -3: - -#define TEST_BR1_OP_NOTTAKEN( testnum, inst, val1 ) \ -test_ ## testnum: \ - li TESTNUM, testnum; \ - li x1, val1; \ - inst x1, 1f; \ - bne x0, TESTNUM, 2f; \ -1: bne x0, TESTNUM, fail; \ -2: inst x1, 1b; \ -3: - -#define TEST_BR1_SRC1_BYPASS( testnum, nop_cycles, inst, val1 ) \ -test_ ## testnum: \ - li TESTNUM, testnum; \ - li x4, 0; \ -1: li x1, val1; \ - TEST_INSERT_NOPS_ ## nop_cycles \ - inst x1, fail; \ - addi x4, x4, 1; \ - li x5, 2; \ - bne x4, x5, 1b \ - -#define TEST_BR2_OP_TAKEN( testnum, inst, val1, val2 ) \ -test_ ## testnum: \ - li TESTNUM, testnum; \ - li x1, val1; \ - li x2, val2; \ - inst x1, x2, 2f; \ - bne x0, TESTNUM, fail; \ -1: bne x0, TESTNUM, 3f; \ -2: inst x1, x2, 1b; \ - bne x0, TESTNUM, fail; \ -3: - -#define TEST_BR2_OP_NOTTAKEN( testnum, inst, val1, val2 ) \ -test_ ## testnum: \ - li TESTNUM, testnum; \ - li x1, val1; \ - li x2, val2; \ - inst x1, x2, 1f; \ - bne x0, TESTNUM, 2f; \ -1: bne x0, TESTNUM, fail; \ -2: inst x1, x2, 1b; \ -3: - -#define TEST_BR2_SRC12_BYPASS( testnum, src1_nops, src2_nops, inst, val1, val2 ) \ -test_ ## testnum: \ - li TESTNUM, testnum; \ - li x4, 0; \ -1: li x1, val1; \ - TEST_INSERT_NOPS_ ## src1_nops \ - li x2, val2; \ - TEST_INSERT_NOPS_ ## src2_nops \ - inst x1, x2, fail; \ - addi x4, x4, 1; \ - li x5, 2; \ - bne x4, x5, 1b \ - -#define TEST_BR2_SRC21_BYPASS( testnum, src1_nops, src2_nops, inst, val1, val2 ) \ -test_ ## testnum: \ - li TESTNUM, testnum; \ - li x4, 0; \ -1: li x2, val2; \ - TEST_INSERT_NOPS_ ## src1_nops \ - li x1, val1; \ - TEST_INSERT_NOPS_ ## src2_nops \ - inst x1, x2, fail; \ - addi x4, x4, 1; \ - li x5, 2; \ - bne x4, x5, 1b \ - -#----------------------------------------------------------------------- -# Test jump instructions -#----------------------------------------------------------------------- - -#define TEST_JR_SRC1_BYPASS( testnum, nop_cycles, inst ) \ -test_ ## testnum: \ - li TESTNUM, testnum; \ - li x4, 0; \ -1: la x6, 2f; \ - TEST_INSERT_NOPS_ ## nop_cycles \ - inst x6; \ - bne x0, TESTNUM, fail; \ -2: addi x4, x4, 1; \ - li x5, 2; \ - bne x4, x5, 1b \ - -#define TEST_JALR_SRC1_BYPASS( testnum, nop_cycles, inst ) \ -test_ ## testnum: \ - li TESTNUM, testnum; \ - li x4, 0; \ -1: la x6, 2f; \ - TEST_INSERT_NOPS_ ## nop_cycles \ - inst x19, x6, 0; \ - bne x0, TESTNUM, fail; \ -2: addi x4, x4, 1; \ - li x5, 2; \ - bne x4, x5, 1b \ - - -#----------------------------------------------------------------------- -# RV64UF MACROS -#----------------------------------------------------------------------- - -#----------------------------------------------------------------------- -# Tests floating-point instructions -#----------------------------------------------------------------------- - -#define TEST_FP_OP_S_INTERNAL( testnum, flags, result, val1, val2, val3, code... ) \ -test_ ## testnum: \ - li TESTNUM, testnum; \ - la a0, test_ ## testnum ## _data ;\ - flw f0, 0(a0); \ - flw f1, 4(a0); \ - flw f2, 8(a0); \ - lw a3, 12(a0); \ - code; \ - fsflags a1, x0; \ - li a2, flags; \ - bne a0, a3, fail; \ - bne a1, a2, fail; \ - j 2f; \ - .align 2; \ - .data; \ - test_ ## testnum ## _data: \ - .float val1; \ - .float val2; \ - .float val3; \ - .result; \ - .text; \ -2: - -#define TEST_FP_OP_D_INTERNAL( testnum, flags, result, val1, val2, val3, code... ) \ -test_ ## testnum: \ - li TESTNUM, testnum; \ - la a0, test_ ## testnum ## _data ;\ - fld f0, 0(a0); \ - fld f1, 8(a0); \ - fld f2, 16(a0); \ - ld a3, 24(a0); \ - code; \ - fsflags a1, x0; \ - li a2, flags; \ - bne a0, a3, fail; \ - bne a1, a2, fail; \ - j 2f; \ - .data; \ - .align 3; \ - test_ ## testnum ## _data: \ - .double val1; \ - .double val2; \ - .double val3; \ - .result; \ - .text; \ -2: - -#define TEST_FCVT_S_D( testnum, result, val1 ) \ - TEST_FP_OP_D_INTERNAL( testnum, 0, double result, val1, 0.0, 0.0, \ - fcvt.s.d f3, f0; fcvt.d.s f3, f3; fmv.x.d a0, f3) - -#define TEST_FCVT_D_S( testnum, result, val1 ) \ - TEST_FP_OP_S_INTERNAL( testnum, 0, float result, val1, 0.0, 0.0, \ - fcvt.d.s f3, f0; fcvt.s.d f3, f3; fmv.x.s a0, f3) - -#define TEST_FP_OP1_S( testnum, inst, flags, result, val1 ) \ - TEST_FP_OP_S_INTERNAL( testnum, flags, float result, val1, 0.0, 0.0, \ - inst f3, f0; fmv.x.s a0, f3) - -#define TEST_FP_OP1_D( testnum, inst, flags, result, val1 ) \ - TEST_FP_OP_D_INTERNAL( testnum, flags, double result, val1, 0.0, 0.0, \ - inst f3, f0; fmv.x.d a0, f3) - -#define TEST_FP_OP2_S( testnum, inst, flags, result, val1, val2 ) \ - TEST_FP_OP_S_INTERNAL( testnum, flags, float result, val1, val2, 0.0, \ - inst f3, f0, f1; fmv.x.s a0, f3) - -#define TEST_FP_OP2_D( testnum, inst, flags, result, val1, val2 ) \ - TEST_FP_OP_D_INTERNAL( testnum, flags, double result, val1, val2, 0.0, \ - inst f3, f0, f1; fmv.x.d a0, f3) - -#define TEST_FP_OP3_S( testnum, inst, flags, result, val1, val2, val3 ) \ - TEST_FP_OP_S_INTERNAL( testnum, flags, float result, val1, val2, val3, \ - inst f3, f0, f1, f2; fmv.x.s a0, f3) - -#define TEST_FP_OP3_D( testnum, inst, flags, result, val1, val2, val3 ) \ - TEST_FP_OP_D_INTERNAL( testnum, flags, double result, val1, val2, val3, \ - inst f3, f0, f1, f2; fmv.x.d a0, f3) - -#define TEST_FP_INT_OP_S( testnum, inst, flags, result, val1, rm ) \ - TEST_FP_OP_S_INTERNAL( testnum, flags, word result, val1, 0.0, 0.0, \ - inst a0, f0, rm) - -#define TEST_FP_INT_OP_D( testnum, inst, flags, result, val1, rm ) \ - TEST_FP_OP_D_INTERNAL( testnum, flags, dword result, val1, 0.0, 0.0, \ - inst a0, f0, rm) - -#define TEST_FP_CMP_OP_S( testnum, inst, result, val1, val2 ) \ - TEST_FP_OP_S_INTERNAL( testnum, 0, word result, val1, val2, 0.0, \ - inst a0, f0, f1) - -#define TEST_FP_CMP_OP_D( testnum, inst, result, val1, val2 ) \ - TEST_FP_OP_D_INTERNAL( testnum, 0, dword result, val1, val2, 0.0, \ - inst a0, f0, f1) - -#define TEST_INT_FP_OP_S( testnum, inst, result, val1 ) \ -test_ ## testnum: \ - li TESTNUM, testnum; \ - la a0, test_ ## testnum ## _data ;\ - lw a3, 0(a0); \ - li a0, val1; \ - inst f0, a0; \ - fsflags x0; \ - fmv.x.s a0, f0; \ - bne a0, a3, fail; \ - j 1f; \ - .align 2; \ - test_ ## testnum ## _data: \ - .float result; \ -1: - -#define TEST_INT_FP_OP_D( testnum, inst, result, val1 ) \ -test_ ## testnum: \ - li TESTNUM, testnum; \ - la a0, test_ ## testnum ## _data ;\ - ld a3, 0(a0); \ - li a0, val1; \ - inst f0, a0; \ - fsflags x0; \ - fmv.x.d a0, f0; \ - bne a0, a3, fail; \ - j 1f; \ - .align 3; \ - test_ ## testnum ## _data: \ - .double result; \ -1: - -#----------------------------------------------------------------------- -# Pass and fail code (assumes test num is in TESTNUM) -#----------------------------------------------------------------------- - -#define TEST_PASSFAIL \ - bne x0, TESTNUM, pass; \ -fail: \ - RVTEST_FAIL; \ -pass: \ - RVTEST_PASS \ - - -#----------------------------------------------------------------------- -# Test data section -#----------------------------------------------------------------------- - -#define TEST_DATA - -#endif diff --git a/picorv32_firmware/tests/xor.S b/picorv32_firmware/tests/xor.S deleted file mode 100644 index 72875fe..0000000 --- a/picorv32_firmware/tests/xor.S +++ /dev/null @@ -1,69 +0,0 @@ -# See LICENSE for license details. - -#***************************************************************************** -# xor.S -#----------------------------------------------------------------------------- -# -# Test xor instruction. -# - -#include "riscv_test.h" -#include "test_macros.h" - -RVTEST_RV32U -RVTEST_CODE_BEGIN - - #------------------------------------------------------------- - # Logical tests - #------------------------------------------------------------- - - TEST_RR_OP( 2, xor, 0xf00ff00f, 0xff00ff00, 0x0f0f0f0f ); - TEST_RR_OP( 3, xor, 0xff00ff00, 0x0ff00ff0, 0xf0f0f0f0 ); - TEST_RR_OP( 4, xor, 0x0ff00ff0, 0x00ff00ff, 0x0f0f0f0f ); - TEST_RR_OP( 5, xor, 0x00ff00ff, 0xf00ff00f, 0xf0f0f0f0 ); - - #------------------------------------------------------------- - # Source/Destination tests - #------------------------------------------------------------- - - TEST_RR_SRC1_EQ_DEST( 6, xor, 0xf00ff00f, 0xff00ff00, 0x0f0f0f0f ); - TEST_RR_SRC2_EQ_DEST( 7, xor, 0xf00ff00f, 0xff00ff00, 0x0f0f0f0f ); - TEST_RR_SRC12_EQ_DEST( 8, xor, 0x00000000, 0xff00ff00 ); - - #------------------------------------------------------------- - # Bypassing tests - #------------------------------------------------------------- - - TEST_RR_DEST_BYPASS( 9, 0, xor, 0xf00ff00f, 0xff00ff00, 0x0f0f0f0f ); - TEST_RR_DEST_BYPASS( 10, 1, xor, 0xff00ff00, 0x0ff00ff0, 0xf0f0f0f0 ); - TEST_RR_DEST_BYPASS( 11, 2, xor, 0x0ff00ff0, 0x00ff00ff, 0x0f0f0f0f ); - - TEST_RR_SRC12_BYPASS( 12, 0, 0, xor, 0xf00ff00f, 0xff00ff00, 0x0f0f0f0f ); - TEST_RR_SRC12_BYPASS( 13, 0, 1, xor, 0xff00ff00, 0x0ff00ff0, 0xf0f0f0f0 ); - TEST_RR_SRC12_BYPASS( 14, 0, 2, xor, 0x0ff00ff0, 0x00ff00ff, 0x0f0f0f0f ); - TEST_RR_SRC12_BYPASS( 15, 1, 0, xor, 0xf00ff00f, 0xff00ff00, 0x0f0f0f0f ); - TEST_RR_SRC12_BYPASS( 16, 1, 1, xor, 0xff00ff00, 0x0ff00ff0, 0xf0f0f0f0 ); - TEST_RR_SRC12_BYPASS( 17, 2, 0, xor, 0x0ff00ff0, 0x00ff00ff, 0x0f0f0f0f ); - - TEST_RR_SRC21_BYPASS( 18, 0, 0, xor, 0xf00ff00f, 0xff00ff00, 0x0f0f0f0f ); - TEST_RR_SRC21_BYPASS( 19, 0, 1, xor, 0xff00ff00, 0x0ff00ff0, 0xf0f0f0f0 ); - TEST_RR_SRC21_BYPASS( 20, 0, 2, xor, 0x0ff00ff0, 0x00ff00ff, 0x0f0f0f0f ); - TEST_RR_SRC21_BYPASS( 21, 1, 0, xor, 0xf00ff00f, 0xff00ff00, 0x0f0f0f0f ); - TEST_RR_SRC21_BYPASS( 22, 1, 1, xor, 0xff00ff00, 0x0ff00ff0, 0xf0f0f0f0 ); - TEST_RR_SRC21_BYPASS( 23, 2, 0, xor, 0x0ff00ff0, 0x00ff00ff, 0x0f0f0f0f ); - - TEST_RR_ZEROSRC1( 24, xor, 0xff00ff00, 0xff00ff00 ); - TEST_RR_ZEROSRC2( 25, xor, 0x00ff00ff, 0x00ff00ff ); - TEST_RR_ZEROSRC12( 26, xor, 0 ); - TEST_RR_ZERODEST( 27, xor, 0x11111111, 0x22222222 ); - - TEST_PASSFAIL - -RVTEST_CODE_END - - .data -RVTEST_DATA_BEGIN - - TEST_DATA - -RVTEST_DATA_END diff --git a/picorv32_firmware/tests/xor.o b/picorv32_firmware/tests/xor.o deleted file mode 100644 index 23bef9d21efc5e55b07150569d4cf562fd80da48..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3544 zcmb7HO=w(I6h1eZNn;H&Z~AQMPps24wb90D-b~VIpyHIaRy0T~6(~CKt(hoZM~A*8-cxx<%ClYLciRe&bcUh1OlOJ*CKQ z*+SKpG(E6REv?jGhTPq^2YtVF>R_Yx5#QaX{;h?znJ3q}o!9SNTOZ$dwSOo4!@4c7 ze{RE^gM7EheCy)NMqKDI{RrF$XBcjLMi6zXG3U-nry*GSI}^ZJr9SKrU{@0xrgbv>)l zKhLgyr+%-_d*gh^l{?$q6y%pXYSBs^D$3p2j0g8b?iSXO2+sbDayy%?iv==gbsqUQ zT5DD+RjpX5{GP5ZTkYw};V#f;c|p0)H4v}fiu=y0#)o5eTRL8C^J4aCg`zCr>43t25O`AX0`Q#RCxPpNzYYAS;O_#rhaV9|XTZ~fyWsB$ z{vr5P!AszG1pgSk9p^|7MNrJdJOx9*UjwO1& zNbr^3fF1gAWv$FHGUc&SdE`>@;uvMdCs>YL8k;PKWc2c-G4gG)^nUS!3mWIN=+|OE zi$hxEwK%NBpcYP_k&cmBBTXd7gmO$Q#{_dsG{=Np4+Jz760^z)2g z()tCV|AX<%TK`b!x8p2W2eiJ2v8m4x<6f;lBlK4o^QDb(Rp{%CGg{ve`lpN!YJEF4 zDTv?C*n9|%3;j4_N849~eoo-)0{zorqfDthq2>7i zO^jVA;yCl+9W9oNlsSh+{~sd_TWlkl)+7FZN+G;Eb-zMIyYL`AD&XOfA{Hyyjt6fOZ`($89D@f-ye1qRuK*{`m%qClkI&9Cc!F4fbPd5r UgCO7mOs%pTMbc*L*e$gC595e);s5{u diff --git a/picorv32_firmware/tests/xori.S b/picorv32_firmware/tests/xori.S deleted file mode 100644 index 7f2207c..0000000 --- a/picorv32_firmware/tests/xori.S +++ /dev/null @@ -1,55 +0,0 @@ -# See LICENSE for license details. - -#***************************************************************************** -# xori.S -#----------------------------------------------------------------------------- -# -# Test xori instruction. -# - -#include "riscv_test.h" -#include "test_macros.h" - -RVTEST_RV32U -RVTEST_CODE_BEGIN - - #------------------------------------------------------------- - # Logical tests - #------------------------------------------------------------- - - TEST_IMM_OP( 2, xori, 0xff00f00f, 0x00ff0f00, 0xf0f ); - TEST_IMM_OP( 3, xori, 0x0ff00f00, 0x0ff00ff0, 0x0f0 ); - TEST_IMM_OP( 4, xori, 0x00ff0ff0, 0x00ff08ff, 0x70f ); - TEST_IMM_OP( 5, xori, 0xf00ff0ff, 0xf00ff00f, 0x0f0 ); - - #------------------------------------------------------------- - # Source/Destination tests - #------------------------------------------------------------- - - TEST_IMM_SRC1_EQ_DEST( 6, xori, 0xff00f00f, 0xff00f700, 0x70f ); - - #------------------------------------------------------------- - # Bypassing tests - #------------------------------------------------------------- - - TEST_IMM_DEST_BYPASS( 7, 0, xori, 0x0ff00f00, 0x0ff00ff0, 0x0f0 ); - TEST_IMM_DEST_BYPASS( 8, 1, xori, 0x00ff0ff0, 0x00ff08ff, 0x70f ); - TEST_IMM_DEST_BYPASS( 9, 2, xori, 0xf00ff0ff, 0xf00ff00f, 0x0f0 ); - - TEST_IMM_SRC1_BYPASS( 10, 0, xori, 0x0ff00f00, 0x0ff00ff0, 0x0f0 ); - TEST_IMM_SRC1_BYPASS( 11, 1, xori, 0x00ff0ff0, 0x00ff0fff, 0x00f ); - TEST_IMM_SRC1_BYPASS( 12, 2, xori, 0xf00ff0ff, 0xf00ff00f, 0x0f0 ); - - TEST_IMM_ZEROSRC1( 13, xori, 0x0f0, 0x0f0 ); - TEST_IMM_ZERODEST( 14, xori, 0x00ff00ff, 0x70f ); - - TEST_PASSFAIL - -RVTEST_CODE_END - - .data -RVTEST_DATA_BEGIN - - TEST_DATA - -RVTEST_DATA_END diff --git a/picorv32_firmware/tests/xori.o b/picorv32_firmware/tests/xori.o deleted file mode 100644 index c410201b1d06f5fe50c04082691685fc0cc90903..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2040 zcmb7EO=wd=5T2L6TF~Ux*H&$<1{CQ*gK4YPTMqsmiWEWcAk_F8so0;8jS( z79WU6ks=;ENe|Uj@K8nX4Mk88EQsL2!vj5dki>6x-=@<_4^G&f@0*>OH@iF8TPOQY zS(ZgcEc!`njA${YS9+A{q%G7yy-^}38l~PC*^|)j-6-u#zJ#rX#{9jt@v*{HcK4#I zA-3}<+cokg$oJm(ez{6DZ@NlOJW1|@N=MoD6IiQxZzxgT13Vq~o%msLA6D9RoPQ5- z`SKp*n2y(+c!u0Zm0e{&;d>K4skkcebT#3``^lZH>?r%lH$i!C332uBT_X4Ka*Gop z)U)xw}^qDn`_&Vm8Lv zh^yBbq?r@dd=4H!mTMDBuY%kg$abn4+7xN=d!yNAZ1;+be zd&JnI1d9>bO?v!+}l*x+~B@rgRVGv&AB%`qH7an!D88t>zvzA5rsBQg0hi1BF~E z*iTy|08rflWK(-!XJzcXZ##HXcLO)!EoJG$u(v2kLjq3;JSXsLfj={D#RU0*Ve;6x z3wwt$Q<8Cz{|w`u+I~UUON{wX0hto^r;OXQeL>hiGH%!Q@526DU>p5rzT3>WMf(o| zH+5)Csp9pKQuZ=*si5_cL519K7Hz^!F_w_44+?)Av4i?rj1?O9Zk?ZCD;O}zJ dG-8-sfOHcJZy5w)@-=}=zbPb28z*Sv_ZN^IOS%96 diff --git a/ser_add_tb.v b/ser_add_tb.v deleted file mode 100644 index 8cc8e00..0000000 --- a/ser_add_tb.v +++ /dev/null @@ -1,78 +0,0 @@ -`default_nettype none -module ser_add_tb; - localparam MAX_LEN = 6; - - reg clk = 1'b1; - reg a = 1'b0; - reg b = 1'b0; - wire q; - reg clear = 1'b0; - - - - vlog_tb_utils vtu(); - - always #5 clk <= !clk; - - initial begin - @(posedge clk); - repeat (1000) do_transaction; - $finish; - - end - - task do_transaction; - integer len; - integer idx; - integer areg, breg; - integer received, expected; - - beginUsing 0d bits - - len = 0; - while (len < 1) - len = ($random % MAX_LEN) + 1; - areg = $random & ((2**len)-1); - breg = $random & ((2**len)-1); - expected = areg+breg; - received = 0/*'dx*/; - - $write("Using %0d bits. Expecting %0d+%0d=%0d...", len, areg, breg, expected); - - for (idx=0;idx