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 75e5569..0000000 Binary files a/picorv32_firmware/firmware/firmware.elf and /dev/null differ 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 6301da0..0000000 Binary files a/picorv32_firmware/firmware/irq.o and /dev/null differ diff --git a/picorv32_firmware/firmware/makehex.py b/picorv32_firmware/firmware/makehex.py deleted file mode 100644 index 419b378..0000000 --- a/picorv32_firmware/firmware/makehex.py +++ /dev/null @@ -1,27 +0,0 @@ -#!/usr/bin/env python3 -# -# 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. - -from sys import argv - -binfile = argv[1] -nwords = int(argv[2]) - -with open(binfile, "rb") as f: - bindata = f.read() - -assert len(bindata) < 4*nwords -assert len(bindata) % 4 == 0 - -for i in range(nwords): - if i < len(bindata) // 4: - w = bindata[4*i : 4*i+4] - print("%02x%02x%02x%02x" % (w[3], w[2], w[1], w[0])) - else: - print("0") - diff --git a/picorv32_firmware/firmware/multest.c b/picorv32_firmware/firmware/multest.c deleted file mode 100644 index d156d8a..0000000 --- a/picorv32_firmware/firmware/multest.c +++ /dev/null @@ -1,85 +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 uint32_t xorshift32(void) { - static uint32_t x = 314159265; - x ^= x << 13; - x ^= x >> 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 60ef431..0000000 Binary files a/picorv32_firmware/firmware/print.o and /dev/null differ 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 cf5f340..0000000 Binary files a/picorv32_firmware/firmware/sieve.o and /dev/null differ 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 3ba1af6..0000000 Binary files a/picorv32_firmware/firmware/stats.o and /dev/null differ 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 ccd66dd..0000000 Binary files a/picorv32_firmware/tests/add.o and /dev/null differ 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 c41d99d..0000000 Binary files a/picorv32_firmware/tests/addi.o and /dev/null differ diff --git a/picorv32_firmware/tests/and.S b/picorv32_firmware/tests/and.S deleted file mode 100644 index 561ae3b..0000000 --- a/picorv32_firmware/tests/and.S +++ /dev/null @@ -1,69 +0,0 @@ -# See LICENSE for license details. - -#***************************************************************************** -# and.S -#----------------------------------------------------------------------------- -# -# Test and instruction. -# - -#include "riscv_test.h" -#include "test_macros.h" - -RVTEST_RV32U -RVTEST_CODE_BEGIN - - #------------------------------------------------------------- - # Logical tests - #------------------------------------------------------------- - - TEST_RR_OP( 2, and, 0x0f000f00, 0xff00ff00, 0x0f0f0f0f ); - TEST_RR_OP( 3, and, 0x00f000f0, 0x0ff00ff0, 0xf0f0f0f0 ); - TEST_RR_OP( 4, and, 0x000f000f, 0x00ff00ff, 0x0f0f0f0f ); - TEST_RR_OP( 5, and, 0xf000f000, 0xf00ff00f, 0xf0f0f0f0 ); - - #------------------------------------------------------------- - # Source/Destination tests - #------------------------------------------------------------- - - TEST_RR_SRC1_EQ_DEST( 6, and, 0x0f000f00, 0xff00ff00, 0x0f0f0f0f ); - TEST_RR_SRC2_EQ_DEST( 7, and, 0x00f000f0, 0x0ff00ff0, 0xf0f0f0f0 ); - TEST_RR_SRC12_EQ_DEST( 8, and, 0xff00ff00, 0xff00ff00 ); - - #------------------------------------------------------------- - # Bypassing tests - #------------------------------------------------------------- - - TEST_RR_DEST_BYPASS( 9, 0, and, 0x0f000f00, 0xff00ff00, 0x0f0f0f0f ); - TEST_RR_DEST_BYPASS( 10, 1, and, 0x00f000f0, 0x0ff00ff0, 0xf0f0f0f0 ); - TEST_RR_DEST_BYPASS( 11, 2, and, 0x000f000f, 0x00ff00ff, 0x0f0f0f0f ); - - TEST_RR_SRC12_BYPASS( 12, 0, 0, and, 0x0f000f00, 0xff00ff00, 0x0f0f0f0f ); - TEST_RR_SRC12_BYPASS( 13, 0, 1, and, 0x00f000f0, 0x0ff00ff0, 0xf0f0f0f0 ); - TEST_RR_SRC12_BYPASS( 14, 0, 2, and, 0x000f000f, 0x00ff00ff, 0x0f0f0f0f ); - TEST_RR_SRC12_BYPASS( 15, 1, 0, and, 0x0f000f00, 0xff00ff00, 0x0f0f0f0f ); - TEST_RR_SRC12_BYPASS( 16, 1, 1, and, 0x00f000f0, 0x0ff00ff0, 0xf0f0f0f0 ); - TEST_RR_SRC12_BYPASS( 17, 2, 0, and, 0x000f000f, 0x00ff00ff, 0x0f0f0f0f ); - - TEST_RR_SRC21_BYPASS( 18, 0, 0, and, 0x0f000f00, 0xff00ff00, 0x0f0f0f0f ); - TEST_RR_SRC21_BYPASS( 19, 0, 1, and, 0x00f000f0, 0x0ff00ff0, 0xf0f0f0f0 ); - TEST_RR_SRC21_BYPASS( 20, 0, 2, and, 0x000f000f, 0x00ff00ff, 0x0f0f0f0f ); - TEST_RR_SRC21_BYPASS( 21, 1, 0, and, 0x0f000f00, 0xff00ff00, 0x0f0f0f0f ); - TEST_RR_SRC21_BYPASS( 22, 1, 1, and, 0x00f000f0, 0x0ff00ff0, 0xf0f0f0f0 ); - TEST_RR_SRC21_BYPASS( 23, 2, 0, and, 0x000f000f, 0x00ff00ff, 0x0f0f0f0f ); - - TEST_RR_ZEROSRC1( 24, and, 0, 0xff00ff00 ); - TEST_RR_ZEROSRC2( 25, and, 0, 0x00ff00ff ); - TEST_RR_ZEROSRC12( 26, and, 0 ); - TEST_RR_ZERODEST( 27, and, 0x11111111, 0x22222222 ); - - TEST_PASSFAIL - -RVTEST_CODE_END - - .data -RVTEST_DATA_BEGIN - - TEST_DATA - -RVTEST_DATA_END diff --git a/picorv32_firmware/tests/and.o b/picorv32_firmware/tests/and.o deleted file mode 100644 index 3de48c4..0000000 Binary files a/picorv32_firmware/tests/and.o and /dev/null differ 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 b72885d..0000000 Binary files a/picorv32_firmware/tests/andi.o and /dev/null differ 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 bb91f0f..0000000 Binary files a/picorv32_firmware/tests/auipc.o and /dev/null differ 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 372102c..0000000 Binary files a/picorv32_firmware/tests/beq.o and /dev/null differ 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 a66735a..0000000 Binary files a/picorv32_firmware/tests/bge.o and /dev/null differ diff --git a/picorv32_firmware/tests/bgeu.S b/picorv32_firmware/tests/bgeu.S deleted file mode 100644 index 114c845..0000000 --- a/picorv32_firmware/tests/bgeu.S +++ /dev/null @@ -1,76 +0,0 @@ -# See LICENSE for license details. - -#***************************************************************************** -# bgeu.S -#----------------------------------------------------------------------------- -# -# Test bgeu 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, bgeu, 0x00000000, 0x00000000 ); - TEST_BR2_OP_TAKEN( 3, bgeu, 0x00000001, 0x00000001 ); - TEST_BR2_OP_TAKEN( 4, bgeu, 0xffffffff, 0xffffffff ); - TEST_BR2_OP_TAKEN( 5, bgeu, 0x00000001, 0x00000000 ); - TEST_BR2_OP_TAKEN( 6, bgeu, 0xffffffff, 0xfffffffe ); - TEST_BR2_OP_TAKEN( 7, bgeu, 0xffffffff, 0x00000000 ); - - TEST_BR2_OP_NOTTAKEN( 8, bgeu, 0x00000000, 0x00000001 ); - TEST_BR2_OP_NOTTAKEN( 9, bgeu, 0xfffffffe, 0xffffffff ); - TEST_BR2_OP_NOTTAKEN( 10, bgeu, 0x00000000, 0xffffffff ); - TEST_BR2_OP_NOTTAKEN( 11, bgeu, 0x7fffffff, 0x80000000 ); - - #------------------------------------------------------------- - # Bypassing tests - #------------------------------------------------------------- - - TEST_BR2_SRC12_BYPASS( 12, 0, 0, bgeu, 0xefffffff, 0xf0000000 ); - TEST_BR2_SRC12_BYPASS( 13, 0, 1, bgeu, 0xefffffff, 0xf0000000 ); - TEST_BR2_SRC12_BYPASS( 14, 0, 2, bgeu, 0xefffffff, 0xf0000000 ); - TEST_BR2_SRC12_BYPASS( 15, 1, 0, bgeu, 0xefffffff, 0xf0000000 ); - TEST_BR2_SRC12_BYPASS( 16, 1, 1, bgeu, 0xefffffff, 0xf0000000 ); - TEST_BR2_SRC12_BYPASS( 17, 2, 0, bgeu, 0xefffffff, 0xf0000000 ); - - TEST_BR2_SRC12_BYPASS( 18, 0, 0, bgeu, 0xefffffff, 0xf0000000 ); - TEST_BR2_SRC12_BYPASS( 19, 0, 1, bgeu, 0xefffffff, 0xf0000000 ); - TEST_BR2_SRC12_BYPASS( 20, 0, 2, bgeu, 0xefffffff, 0xf0000000 ); - TEST_BR2_SRC12_BYPASS( 21, 1, 0, bgeu, 0xefffffff, 0xf0000000 ); - TEST_BR2_SRC12_BYPASS( 22, 1, 1, bgeu, 0xefffffff, 0xf0000000 ); - TEST_BR2_SRC12_BYPASS( 23, 2, 0, bgeu, 0xefffffff, 0xf0000000 ); - - #------------------------------------------------------------- - # Test delay slot instructions not executed nor bypassed - #------------------------------------------------------------- - - TEST_CASE( 24, x1, 3, \ - li x1, 1; \ - bgeu 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/bgeu.o b/picorv32_firmware/tests/bgeu.o deleted file mode 100644 index ddf7a16..0000000 Binary files a/picorv32_firmware/tests/bgeu.o and /dev/null differ diff --git a/picorv32_firmware/tests/blt.S b/picorv32_firmware/tests/blt.S deleted file mode 100644 index 12e28c3..0000000 --- a/picorv32_firmware/tests/blt.S +++ /dev/null @@ -1,73 +0,0 @@ -# See LICENSE for license details. - -#***************************************************************************** -# blt.S -#----------------------------------------------------------------------------- -# -# Test blt 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, blt, 0, 1 ); - TEST_BR2_OP_TAKEN( 3, blt, -1, 1 ); - TEST_BR2_OP_TAKEN( 4, blt, -2, -1 ); - - TEST_BR2_OP_NOTTAKEN( 5, blt, 1, 0 ); - TEST_BR2_OP_NOTTAKEN( 6, blt, 1, -1 ); - TEST_BR2_OP_NOTTAKEN( 7, blt, -1, -2 ); - TEST_BR2_OP_NOTTAKEN( 8, blt, 1, -2 ); - - #------------------------------------------------------------- - # Bypassing tests - #------------------------------------------------------------- - - TEST_BR2_SRC12_BYPASS( 9, 0, 0, blt, 0, -1 ); - TEST_BR2_SRC12_BYPASS( 10, 0, 1, blt, 0, -1 ); - TEST_BR2_SRC12_BYPASS( 11, 0, 2, blt, 0, -1 ); - TEST_BR2_SRC12_BYPASS( 12, 1, 0, blt, 0, -1 ); - TEST_BR2_SRC12_BYPASS( 13, 1, 1, blt, 0, -1 ); - TEST_BR2_SRC12_BYPASS( 14, 2, 0, blt, 0, -1 ); - - TEST_BR2_SRC12_BYPASS( 15, 0, 0, blt, 0, -1 ); - TEST_BR2_SRC12_BYPASS( 16, 0, 1, blt, 0, -1 ); - TEST_BR2_SRC12_BYPASS( 17, 0, 2, blt, 0, -1 ); - TEST_BR2_SRC12_BYPASS( 18, 1, 0, blt, 0, -1 ); - TEST_BR2_SRC12_BYPASS( 19, 1, 1, blt, 0, -1 ); - TEST_BR2_SRC12_BYPASS( 20, 2, 0, blt, 0, -1 ); - - #------------------------------------------------------------- - # Test delay slot instructions not executed nor bypassed - #------------------------------------------------------------- - - TEST_CASE( 21, x1, 3, \ - li x1, 1; \ - blt 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/blt.o b/picorv32_firmware/tests/blt.o deleted file mode 100644 index f7df9ae..0000000 Binary files a/picorv32_firmware/tests/blt.o and /dev/null differ 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 28c9f61..0000000 Binary files a/picorv32_firmware/tests/bltu.o and /dev/null differ 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 cc45986..0000000 Binary files a/picorv32_firmware/tests/bne.o and /dev/null differ 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 28de446..0000000 Binary files a/picorv32_firmware/tests/j.o and /dev/null differ 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 7e511c2..0000000 Binary files a/picorv32_firmware/tests/jal.o and /dev/null differ diff --git a/picorv32_firmware/tests/jalr.S b/picorv32_firmware/tests/jalr.S deleted file mode 100644 index ebe3731..0000000 --- a/picorv32_firmware/tests/jalr.S +++ /dev/null @@ -1,88 +0,0 @@ -# See LICENSE for license details. - -#***************************************************************************** -# jalr.S -#----------------------------------------------------------------------------- -# -# Test jalr instruction. -# - -#include "riscv_test.h" -#include "test_macros.h" - -RVTEST_RV32U -RVTEST_CODE_BEGIN - - #------------------------------------------------------------- - # Test 2: Basic test - #------------------------------------------------------------- - -test_2: - li TESTNUM, 2 - li x31, 0 - la x2, target_2 - -linkaddr_2: - jalr x19, x2, 0 - nop - nop - - j fail - -target_2: - la x1, linkaddr_2 - addi x1, x1, 4 - bne x1, x19, fail - - #------------------------------------------------------------- - # Test 3: Check r0 target and that r31 is not modified - #------------------------------------------------------------- - -test_3: - li TESTNUM, 3 - li x31, 0 - la x3, target_3 - -linkaddr_3: - jalr x0, x3, 0 - nop - - j fail - -target_3: - bne x31, x0, fail - - #------------------------------------------------------------- - # Bypassing tests - #------------------------------------------------------------- - - TEST_JALR_SRC1_BYPASS( 4, 0, jalr ); - TEST_JALR_SRC1_BYPASS( 5, 1, jalr ); - TEST_JALR_SRC1_BYPASS( 6, 2, jalr ); - - #------------------------------------------------------------- - # Test delay slot instructions not executed nor bypassed - #------------------------------------------------------------- - - TEST_CASE( 7, x1, 4, \ - li x1, 1; \ - la x2, 1f; - jalr x19, x2, -4; \ - 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/jalr.o b/picorv32_firmware/tests/jalr.o deleted file mode 100644 index 5dc4ed4..0000000 Binary files a/picorv32_firmware/tests/jalr.o and /dev/null differ 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 bd1173a..0000000 Binary files a/picorv32_firmware/tests/lb.o and /dev/null differ 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 2fefcd1..0000000 Binary files a/picorv32_firmware/tests/lbu.o and /dev/null differ 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 e4c99bd..0000000 Binary files a/picorv32_firmware/tests/lh.o and /dev/null differ 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 9e7f099..0000000 Binary files a/picorv32_firmware/tests/lhu.o and /dev/null differ 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 3a35aa5..0000000 Binary files a/picorv32_firmware/tests/lui.o and /dev/null differ diff --git a/picorv32_firmware/tests/lw.S b/picorv32_firmware/tests/lw.S deleted file mode 100644 index 4a07838..0000000 --- a/picorv32_firmware/tests/lw.S +++ /dev/null @@ -1,92 +0,0 @@ -# See LICENSE for license details. - -#***************************************************************************** -# lw.S -#----------------------------------------------------------------------------- -# -# Test lw instruction. -# - -#include "riscv_test.h" -#include "test_macros.h" - -RVTEST_RV32U -RVTEST_CODE_BEGIN - - #------------------------------------------------------------- - # Basic tests - #------------------------------------------------------------- - - TEST_LD_OP( 2, lw, 0x00ff00ff, 0, tdat ); - TEST_LD_OP( 3, lw, 0xff00ff00, 4, tdat ); - TEST_LD_OP( 4, lw, 0x0ff00ff0, 8, tdat ); - TEST_LD_OP( 5, lw, 0xf00ff00f, 12, tdat ); - - # Test with negative offset - - TEST_LD_OP( 6, lw, 0x00ff00ff, -12, tdat4 ); - TEST_LD_OP( 7, lw, 0xff00ff00, -8, tdat4 ); - TEST_LD_OP( 8, lw, 0x0ff00ff0, -4, tdat4 ); - TEST_LD_OP( 9, lw, 0xf00ff00f, 0, tdat4 ); - - # Test with a negative base - - TEST_CASE( 10, x3, 0x00ff00ff, \ - la x1, tdat; \ - addi x1, x1, -32; \ - lw x3, 32(x1); \ - ) - - # Test with unaligned base - - TEST_CASE( 11, x3, 0xff00ff00, \ - la x1, tdat; \ - addi x1, x1, -3; \ - lw x3, 7(x1); \ - ) - - #------------------------------------------------------------- - # Bypassing tests - #------------------------------------------------------------- - - TEST_LD_DEST_BYPASS( 12, 0, lw, 0x0ff00ff0, 4, tdat2 ); - TEST_LD_DEST_BYPASS( 13, 1, lw, 0xf00ff00f, 4, tdat3 ); - TEST_LD_DEST_BYPASS( 14, 2, lw, 0xff00ff00, 4, tdat1 ); - - TEST_LD_SRC1_BYPASS( 15, 0, lw, 0x0ff00ff0, 4, tdat2 ); - TEST_LD_SRC1_BYPASS( 16, 1, lw, 0xf00ff00f, 4, tdat3 ); - TEST_LD_SRC1_BYPASS( 17, 2, lw, 0xff00ff00, 4, tdat1 ); - - #------------------------------------------------------------- - # Test write-after-write hazard - #------------------------------------------------------------- - - TEST_CASE( 18, x2, 2, \ - la x3, tdat; \ - lw x2, 0(x3); \ - li x2, 2; \ - ) - - TEST_CASE( 19, x2, 2, \ - la x3, tdat; \ - lw x2, 0(x3); \ - nop; \ - li x2, 2; \ - ) - - TEST_PASSFAIL - -RVTEST_CODE_END - - .data -RVTEST_DATA_BEGIN - - TEST_DATA - -tdat: -tdat1: .word 0x00ff00ff -tdat2: .word 0xff00ff00 -tdat3: .word 0x0ff00ff0 -tdat4: .word 0xf00ff00f - -RVTEST_DATA_END diff --git a/picorv32_firmware/tests/lw.o b/picorv32_firmware/tests/lw.o deleted file mode 100644 index 1b6a9ad..0000000 Binary files a/picorv32_firmware/tests/lw.o and /dev/null differ 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 16d1f10..0000000 Binary files a/picorv32_firmware/tests/or.o and /dev/null differ diff --git a/picorv32_firmware/tests/ori.S b/picorv32_firmware/tests/ori.S deleted file mode 100644 index a674784..0000000 --- a/picorv32_firmware/tests/ori.S +++ /dev/null @@ -1,55 +0,0 @@ -# See LICENSE for license details. - -#***************************************************************************** -# ori.S -#----------------------------------------------------------------------------- -# -# Test ori instruction. -# - -#include "riscv_test.h" -#include "test_macros.h" - -RVTEST_RV32U -RVTEST_CODE_BEGIN - - #------------------------------------------------------------- - # Logical tests - #------------------------------------------------------------- - - TEST_IMM_OP( 2, ori, 0xffffff0f, 0xff00ff00, 0xf0f ); - TEST_IMM_OP( 3, ori, 0x0ff00ff0, 0x0ff00ff0, 0x0f0 ); - TEST_IMM_OP( 4, ori, 0x00ff07ff, 0x00ff00ff, 0x70f ); - TEST_IMM_OP( 5, ori, 0xf00ff0ff, 0xf00ff00f, 0x0f0 ); - - #------------------------------------------------------------- - # Source/Destination tests - #------------------------------------------------------------- - - TEST_IMM_SRC1_EQ_DEST( 6, ori, 0xff00fff0, 0xff00ff00, 0x0f0 ); - - #------------------------------------------------------------- - # Bypassing tests - #------------------------------------------------------------- - - TEST_IMM_DEST_BYPASS( 7, 0, ori, 0x0ff00ff0, 0x0ff00ff0, 0x0f0 ); - TEST_IMM_DEST_BYPASS( 8, 1, ori, 0x00ff07ff, 0x00ff00ff, 0x70f ); - TEST_IMM_DEST_BYPASS( 9, 2, ori, 0xf00ff0ff, 0xf00ff00f, 0x0f0 ); - - TEST_IMM_SRC1_BYPASS( 10, 0, ori, 0x0ff00ff0, 0x0ff00ff0, 0x0f0 ); - TEST_IMM_SRC1_BYPASS( 11, 1, ori, 0xffffffff, 0x00ff00ff, 0xf0f ); - TEST_IMM_SRC1_BYPASS( 12, 2, ori, 0xf00ff0ff, 0xf00ff00f, 0x0f0 ); - - TEST_IMM_ZEROSRC1( 13, ori, 0x0f0, 0x0f0 ); - TEST_IMM_ZERODEST( 14, ori, 0x00ff00ff, 0x70f ); - - TEST_PASSFAIL - -RVTEST_CODE_END - - .data -RVTEST_DATA_BEGIN - - TEST_DATA - -RVTEST_DATA_END diff --git a/picorv32_firmware/tests/ori.o b/picorv32_firmware/tests/ori.o deleted file mode 100644 index ef13d27..0000000 Binary files a/picorv32_firmware/tests/ori.o and /dev/null differ 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 fe1fa93..0000000 Binary files a/picorv32_firmware/tests/sb.o and /dev/null differ 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 d2b573a..0000000 Binary files a/picorv32_firmware/tests/sh.o and /dev/null differ diff --git a/picorv32_firmware/tests/simple.S b/picorv32_firmware/tests/simple.S deleted file mode 100644 index 92cf203..0000000 --- a/picorv32_firmware/tests/simple.S +++ /dev/null @@ -1,27 +0,0 @@ -# See LICENSE for license details. - -#***************************************************************************** -# simple.S -#----------------------------------------------------------------------------- -# -# This is the most basic self checking test. If your simulator does not -# pass thiss then there is little chance that it will pass any of the -# more complicated self checking tests. -# - -#include "riscv_test.h" -#include "test_macros.h" - -RVTEST_RV32U -RVTEST_CODE_BEGIN - -RVTEST_PASS - -RVTEST_CODE_END - - .data -RVTEST_DATA_BEGIN - - TEST_DATA - -RVTEST_DATA_END diff --git a/picorv32_firmware/tests/simple.o b/picorv32_firmware/tests/simple.o deleted file mode 100644 index 0c91173..0000000 Binary files a/picorv32_firmware/tests/simple.o and /dev/null differ 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 5c94567..0000000 Binary files a/picorv32_firmware/tests/sll.o and /dev/null differ 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 7a13bdb..0000000 Binary files a/picorv32_firmware/tests/slli.o and /dev/null differ diff --git a/picorv32_firmware/tests/slt.S b/picorv32_firmware/tests/slt.S deleted file mode 100644 index 3abf82b..0000000 --- a/picorv32_firmware/tests/slt.S +++ /dev/null @@ -1,84 +0,0 @@ -# See LICENSE for license details. - -#***************************************************************************** -# slt.S -#----------------------------------------------------------------------------- -# -# Test slt instruction. -# - -#include "riscv_test.h" -#include "test_macros.h" - -RVTEST_RV32U -RVTEST_CODE_BEGIN - - #------------------------------------------------------------- - # Arithmetic tests - #------------------------------------------------------------- - - TEST_RR_OP( 2, slt, 0, 0x00000000, 0x00000000 ); - TEST_RR_OP( 3, slt, 0, 0x00000001, 0x00000001 ); - TEST_RR_OP( 4, slt, 1, 0x00000003, 0x00000007 ); - TEST_RR_OP( 5, slt, 0, 0x00000007, 0x00000003 ); - - TEST_RR_OP( 6, slt, 0, 0x00000000, 0xffff8000 ); - TEST_RR_OP( 7, slt, 1, 0x80000000, 0x00000000 ); - TEST_RR_OP( 8, slt, 1, 0x80000000, 0xffff8000 ); - - TEST_RR_OP( 9, slt, 1, 0x00000000, 0x00007fff ); - TEST_RR_OP( 10, slt, 0, 0x7fffffff, 0x00000000 ); - TEST_RR_OP( 11, slt, 0, 0x7fffffff, 0x00007fff ); - - TEST_RR_OP( 12, slt, 1, 0x80000000, 0x00007fff ); - TEST_RR_OP( 13, slt, 0, 0x7fffffff, 0xffff8000 ); - - TEST_RR_OP( 14, slt, 0, 0x00000000, 0xffffffff ); - TEST_RR_OP( 15, slt, 1, 0xffffffff, 0x00000001 ); - TEST_RR_OP( 16, slt, 0, 0xffffffff, 0xffffffff ); - - #------------------------------------------------------------- - # Source/Destination tests - #------------------------------------------------------------- - - TEST_RR_SRC1_EQ_DEST( 17, slt, 0, 14, 13 ); - TEST_RR_SRC2_EQ_DEST( 18, slt, 1, 11, 13 ); - TEST_RR_SRC12_EQ_DEST( 19, slt, 0, 13 ); - - #------------------------------------------------------------- - # Bypassing tests - #------------------------------------------------------------- - - TEST_RR_DEST_BYPASS( 20, 0, slt, 1, 11, 13 ); - TEST_RR_DEST_BYPASS( 21, 1, slt, 0, 14, 13 ); - TEST_RR_DEST_BYPASS( 22, 2, slt, 1, 12, 13 ); - - TEST_RR_SRC12_BYPASS( 23, 0, 0, slt, 0, 14, 13 ); - TEST_RR_SRC12_BYPASS( 24, 0, 1, slt, 1, 11, 13 ); - TEST_RR_SRC12_BYPASS( 25, 0, 2, slt, 0, 15, 13 ); - TEST_RR_SRC12_BYPASS( 26, 1, 0, slt, 1, 10, 13 ); - TEST_RR_SRC12_BYPASS( 27, 1, 1, slt, 0, 16, 13 ); - TEST_RR_SRC12_BYPASS( 28, 2, 0, slt, 1, 9, 13 ); - - TEST_RR_SRC21_BYPASS( 29, 0, 0, slt, 0, 17, 13 ); - TEST_RR_SRC21_BYPASS( 30, 0, 1, slt, 1, 8, 13 ); - TEST_RR_SRC21_BYPASS( 31, 0, 2, slt, 0, 18, 13 ); - TEST_RR_SRC21_BYPASS( 32, 1, 0, slt, 1, 7, 13 ); - TEST_RR_SRC21_BYPASS( 33, 1, 1, slt, 0, 19, 13 ); - TEST_RR_SRC21_BYPASS( 34, 2, 0, slt, 1, 6, 13 ); - - TEST_RR_ZEROSRC1( 35, slt, 0, -1 ); - TEST_RR_ZEROSRC2( 36, slt, 1, -1 ); - TEST_RR_ZEROSRC12( 37, slt, 0 ); - TEST_RR_ZERODEST( 38, slt, 16, 30 ); - - TEST_PASSFAIL - -RVTEST_CODE_END - - .data -RVTEST_DATA_BEGIN - - TEST_DATA - -RVTEST_DATA_END diff --git a/picorv32_firmware/tests/slt.o b/picorv32_firmware/tests/slt.o deleted file mode 100644 index 50cc037..0000000 Binary files a/picorv32_firmware/tests/slt.o and /dev/null differ 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 f7449ab..0000000 Binary files a/picorv32_firmware/tests/slti.o and /dev/null differ diff --git a/picorv32_firmware/tests/sra.S b/picorv32_firmware/tests/sra.S deleted file mode 100644 index 8c1de36..0000000 --- a/picorv32_firmware/tests/sra.S +++ /dev/null @@ -1,90 +0,0 @@ -# See LICENSE for license details. - -#***************************************************************************** -# sra.S -#----------------------------------------------------------------------------- -# -# Test sra instruction. -# - -#include "riscv_test.h" -#include "test_macros.h" - -RVTEST_RV32U -RVTEST_CODE_BEGIN - - #------------------------------------------------------------- - # Arithmetic tests - #------------------------------------------------------------- - - TEST_RR_OP( 2, sra, 0x80000000, 0x80000000, 0 ); - TEST_RR_OP( 3, sra, 0xc0000000, 0x80000000, 1 ); - TEST_RR_OP( 4, sra, 0xff000000, 0x80000000, 7 ); - TEST_RR_OP( 5, sra, 0xfffe0000, 0x80000000, 14 ); - TEST_RR_OP( 6, sra, 0xffffffff, 0x80000001, 31 ); - - TEST_RR_OP( 7, sra, 0x7fffffff, 0x7fffffff, 0 ); - TEST_RR_OP( 8, sra, 0x3fffffff, 0x7fffffff, 1 ); - TEST_RR_OP( 9, sra, 0x00ffffff, 0x7fffffff, 7 ); - TEST_RR_OP( 10, sra, 0x0001ffff, 0x7fffffff, 14 ); - TEST_RR_OP( 11, sra, 0x00000000, 0x7fffffff, 31 ); - - TEST_RR_OP( 12, sra, 0x81818181, 0x81818181, 0 ); - TEST_RR_OP( 13, sra, 0xc0c0c0c0, 0x81818181, 1 ); - TEST_RR_OP( 14, sra, 0xff030303, 0x81818181, 7 ); - TEST_RR_OP( 15, sra, 0xfffe0606, 0x81818181, 14 ); - TEST_RR_OP( 16, sra, 0xffffffff, 0x81818181, 31 ); - - # Verify that shifts only use bottom five bits - - TEST_RR_OP( 17, sra, 0x81818181, 0x81818181, 0xffffffc0 ); - TEST_RR_OP( 18, sra, 0xc0c0c0c0, 0x81818181, 0xffffffc1 ); - TEST_RR_OP( 19, sra, 0xff030303, 0x81818181, 0xffffffc7 ); - TEST_RR_OP( 20, sra, 0xfffe0606, 0x81818181, 0xffffffce ); - TEST_RR_OP( 21, sra, 0xffffffff, 0x81818181, 0xffffffff ); - - #------------------------------------------------------------- - # Source/Destination tests - #------------------------------------------------------------- - - TEST_RR_SRC1_EQ_DEST( 22, sra, 0xff000000, 0x80000000, 7 ); - TEST_RR_SRC2_EQ_DEST( 23, sra, 0xfffe0000, 0x80000000, 14 ); - TEST_RR_SRC12_EQ_DEST( 24, sra, 0, 7 ); - - #------------------------------------------------------------- - # Bypassing tests - #------------------------------------------------------------- - - TEST_RR_DEST_BYPASS( 25, 0, sra, 0xff000000, 0x80000000, 7 ); - TEST_RR_DEST_BYPASS( 26, 1, sra, 0xfffe0000, 0x80000000, 14 ); - TEST_RR_DEST_BYPASS( 27, 2, sra, 0xffffffff, 0x80000000, 31 ); - - TEST_RR_SRC12_BYPASS( 28, 0, 0, sra, 0xff000000, 0x80000000, 7 ); - TEST_RR_SRC12_BYPASS( 29, 0, 1, sra, 0xfffe0000, 0x80000000, 14 ); - TEST_RR_SRC12_BYPASS( 30, 0, 2, sra, 0xffffffff, 0x80000000, 31 ); - TEST_RR_SRC12_BYPASS( 31, 1, 0, sra, 0xff000000, 0x80000000, 7 ); - TEST_RR_SRC12_BYPASS( 32, 1, 1, sra, 0xfffe0000, 0x80000000, 14 ); - TEST_RR_SRC12_BYPASS( 33, 2, 0, sra, 0xffffffff, 0x80000000, 31 ); - - TEST_RR_SRC21_BYPASS( 34, 0, 0, sra, 0xff000000, 0x80000000, 7 ); - TEST_RR_SRC21_BYPASS( 35, 0, 1, sra, 0xfffe0000, 0x80000000, 14 ); - TEST_RR_SRC21_BYPASS( 36, 0, 2, sra, 0xffffffff, 0x80000000, 31 ); - TEST_RR_SRC21_BYPASS( 37, 1, 0, sra, 0xff000000, 0x80000000, 7 ); - TEST_RR_SRC21_BYPASS( 38, 1, 1, sra, 0xfffe0000, 0x80000000, 14 ); - TEST_RR_SRC21_BYPASS( 39, 2, 0, sra, 0xffffffff, 0x80000000, 31 ); - - TEST_RR_ZEROSRC1( 40, sra, 0, 15 ); - TEST_RR_ZEROSRC2( 41, sra, 32, 32 ); - TEST_RR_ZEROSRC12( 42, sra, 0 ); - TEST_RR_ZERODEST( 43, sra, 1024, 2048 ); - - TEST_PASSFAIL - -RVTEST_CODE_END - - .data -RVTEST_DATA_BEGIN - - TEST_DATA - -RVTEST_DATA_END diff --git a/picorv32_firmware/tests/sra.o b/picorv32_firmware/tests/sra.o deleted file mode 100644 index daceee0..0000000 Binary files a/picorv32_firmware/tests/sra.o and /dev/null differ 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 87b975b..0000000 Binary files a/picorv32_firmware/tests/srai.o and /dev/null differ 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 347b6be..0000000 Binary files a/picorv32_firmware/tests/srl.o and /dev/null differ diff --git a/picorv32_firmware/tests/srli.S b/picorv32_firmware/tests/srli.S deleted file mode 100644 index be56dc3..0000000 --- a/picorv32_firmware/tests/srli.S +++ /dev/null @@ -1,69 +0,0 @@ -# See LICENSE for license details. - -#***************************************************************************** -# srli.S -#----------------------------------------------------------------------------- -# -# Test srli instruction. -# - -#include "riscv_test.h" -#include "test_macros.h" - -RVTEST_RV32U -RVTEST_CODE_BEGIN - - #------------------------------------------------------------- - # Arithmetic tests - #------------------------------------------------------------- - - TEST_IMM_OP( 2, srli, 0xffff8000, 0xffff8000, 0 ); - TEST_IMM_OP( 3, srli, 0x7fffc000, 0xffff8000, 1 ); - TEST_IMM_OP( 4, srli, 0x01ffff00, 0xffff8000, 7 ); - TEST_IMM_OP( 5, srli, 0x0003fffe, 0xffff8000, 14 ); - TEST_IMM_OP( 6, srli, 0x0001ffff, 0xffff8001, 15 ); - - TEST_IMM_OP( 7, srli, 0xffffffff, 0xffffffff, 0 ); - TEST_IMM_OP( 8, srli, 0x7fffffff, 0xffffffff, 1 ); - TEST_IMM_OP( 9, srli, 0x01ffffff, 0xffffffff, 7 ); - TEST_IMM_OP( 10, srli, 0x0003ffff, 0xffffffff, 14 ); - TEST_IMM_OP( 11, srli, 0x00000001, 0xffffffff, 31 ); - - TEST_IMM_OP( 12, srli, 0x21212121, 0x21212121, 0 ); - TEST_IMM_OP( 13, srli, 0x10909090, 0x21212121, 1 ); - TEST_IMM_OP( 14, srli, 0x00424242, 0x21212121, 7 ); - TEST_IMM_OP( 15, srli, 0x00008484, 0x21212121, 14 ); - TEST_IMM_OP( 16, srli, 0x00000000, 0x21212121, 31 ); - - #------------------------------------------------------------- - # Source/Destination tests - #------------------------------------------------------------- - - TEST_IMM_SRC1_EQ_DEST( 21, srli, 0x7fffc000, 0xffff8000, 1 ); - - #------------------------------------------------------------- - # Bypassing tests - #------------------------------------------------------------- - - TEST_IMM_DEST_BYPASS( 22, 0, srl, 0x7fffc000, 0xffff8000, 1 ); - TEST_IMM_DEST_BYPASS( 23, 1, srl, 0x0003fffe, 0xffff8000, 14 ); - TEST_IMM_DEST_BYPASS( 24, 2, srl, 0x0001ffff, 0xffff8000, 15 ); - - TEST_IMM_SRC1_BYPASS( 25, 0, srl, 0x7fffc000, 0xffff8000, 1 ); - TEST_IMM_SRC1_BYPASS( 26, 1, srl, 0x0003fffe, 0xffff8000, 14 ); - TEST_IMM_SRC1_BYPASS( 27, 2, srl, 0x0001ffff, 0xffff8000, 15 ); - - - TEST_IMM_ZEROSRC1( 28, srli, 0, 31 ); - TEST_IMM_ZERODEST( 29, srli, 33, 20 ); - - TEST_PASSFAIL - -RVTEST_CODE_END - - .data -RVTEST_DATA_BEGIN - - TEST_DATA - -RVTEST_DATA_END diff --git a/picorv32_firmware/tests/srli.o b/picorv32_firmware/tests/srli.o deleted file mode 100644 index dd15fd6..0000000 Binary files a/picorv32_firmware/tests/srli.o and /dev/null differ 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 f6beb12..0000000 Binary files a/picorv32_firmware/tests/sub.o and /dev/null differ diff --git a/picorv32_firmware/tests/sw.S b/picorv32_firmware/tests/sw.S deleted file mode 100644 index fbf76cc..0000000 --- a/picorv32_firmware/tests/sw.S +++ /dev/null @@ -1,92 +0,0 @@ -# See LICENSE for license details. - -#***************************************************************************** -# sw.S -#----------------------------------------------------------------------------- -# -# Test sw instruction. -# - -#include "riscv_test.h" -#include "test_macros.h" - -RVTEST_RV32U -RVTEST_CODE_BEGIN - - #------------------------------------------------------------- - # Basic tests - #------------------------------------------------------------- - - TEST_ST_OP( 2, lw, sw, 0x00aa00aa, 0, tdat ); - TEST_ST_OP( 3, lw, sw, 0xaa00aa00, 4, tdat ); - TEST_ST_OP( 4, lw, sw, 0x0aa00aa0, 8, tdat ); - TEST_ST_OP( 5, lw, sw, 0xa00aa00a, 12, tdat ); - - # Test with negative offset - - TEST_ST_OP( 6, lw, sw, 0x00aa00aa, -12, tdat8 ); - TEST_ST_OP( 7, lw, sw, 0xaa00aa00, -8, tdat8 ); - TEST_ST_OP( 8, lw, sw, 0x0aa00aa0, -4, tdat8 ); - TEST_ST_OP( 9, lw, sw, 0xa00aa00a, 0, tdat8 ); - - # Test with a negative base - - TEST_CASE( 10, x3, 0x12345678, \ - la x1, tdat9; \ - li x2, 0x12345678; \ - addi x4, x1, -32; \ - sw x2, 32(x4); \ - lw x3, 0(x1); \ - ) - - # Test with unaligned base - - TEST_CASE( 11, x3, 0x58213098, \ - la x1, tdat9; \ - li x2, 0x58213098; \ - addi x1, x1, -3; \ - sw x2, 7(x1); \ - la x4, tdat10; \ - lw x3, 0(x4); \ - ) - - #------------------------------------------------------------- - # Bypassing tests - #------------------------------------------------------------- - - TEST_ST_SRC12_BYPASS( 12, 0, 0, lw, sw, 0xaabbccdd, 0, tdat ); - TEST_ST_SRC12_BYPASS( 13, 0, 1, lw, sw, 0xdaabbccd, 4, tdat ); - TEST_ST_SRC12_BYPASS( 14, 0, 2, lw, sw, 0xddaabbcc, 8, tdat ); - TEST_ST_SRC12_BYPASS( 15, 1, 0, lw, sw, 0xcddaabbc, 12, tdat ); - TEST_ST_SRC12_BYPASS( 16, 1, 1, lw, sw, 0xccddaabb, 16, tdat ); - TEST_ST_SRC12_BYPASS( 17, 2, 0, lw, sw, 0xbccddaab, 20, tdat ); - - TEST_ST_SRC21_BYPASS( 18, 0, 0, lw, sw, 0x00112233, 0, tdat ); - TEST_ST_SRC21_BYPASS( 19, 0, 1, lw, sw, 0x30011223, 4, tdat ); - TEST_ST_SRC21_BYPASS( 20, 0, 2, lw, sw, 0x33001122, 8, tdat ); - TEST_ST_SRC21_BYPASS( 21, 1, 0, lw, sw, 0x23300112, 12, tdat ); - TEST_ST_SRC21_BYPASS( 22, 1, 1, lw, sw, 0x22330011, 16, tdat ); - TEST_ST_SRC21_BYPASS( 23, 2, 0, lw, sw, 0x12233001, 20, tdat ); - - TEST_PASSFAIL - -RVTEST_CODE_END - - .data -RVTEST_DATA_BEGIN - - TEST_DATA - -tdat: -tdat1: .word 0xdeadbeef -tdat2: .word 0xdeadbeef -tdat3: .word 0xdeadbeef -tdat4: .word 0xdeadbeef -tdat5: .word 0xdeadbeef -tdat6: .word 0xdeadbeef -tdat7: .word 0xdeadbeef -tdat8: .word 0xdeadbeef -tdat9: .word 0xdeadbeef -tdat10: .word 0xdeadbeef - -RVTEST_DATA_END diff --git a/picorv32_firmware/tests/sw.o b/picorv32_firmware/tests/sw.o deleted file mode 100644 index d3a9160..0000000 Binary files a/picorv32_firmware/tests/sw.o and /dev/null differ 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 23bef9d..0000000 Binary files a/picorv32_firmware/tests/xor.o and /dev/null differ 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 c410201..0000000 Binary files a/picorv32_firmware/tests/xori.o and /dev/null differ 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