This commit is contained in:
Blaise Tine
2022-02-05 16:12:52 -05:00
333 changed files with 15008 additions and 32483 deletions

View File

@@ -19,8 +19,6 @@ install:
- export PATH=$VERILATOR_ROOT/bin:$PATH - export PATH=$VERILATOR_ROOT/bin:$PATH
# Install toolchain # Install toolchain
- ci/toolchain_install.sh -all - ci/toolchain_install.sh -all
# build project
- make -s
# stages ordering # stages ordering
stages: stages:
@@ -30,7 +28,13 @@ jobs:
include: include:
- stage: test - stage: test
name: coverage name: coverage
script: cp -r $PWD ../build_coverage && cd ../build_coverage && ./ci/travis_run.py ./ci/regression.sh -coverage script: cp -r $PWD ../build_coverage && cd ../build_coverage && ./ci/travis_run.py ./ci/regression.sh -coverage
- stage: test
name: coverage64
script: cp -r $PWD ../build_coverage64 && cd ../build_coverage64 && ./ci/travis_run.py ./ci/regression64.sh -coverage
- stage: test
name: tex
script: cp -r $PWD ../build_tex && cd ../build_tex && ./ci/travis_run.py ./ci/regression.sh -tex
- stage: test - stage: test
name: cluster name: cluster
script: cp -r $PWD ../build_cluster && cd ../build_cluster && ./ci/travis_run.py ./ci/regression.sh -cluster script: cp -r $PWD ../build_cluster && cd ../build_cluster && ./ci/travis_run.py ./ci/regression.sh -cluster

36
ci/regression64.sh Executable file
View File

@@ -0,0 +1,36 @@
#!/bin/bash
# exit when any command fails
set -e
# ensure build
XLEN=64 make -s
coverage()
{
echo "begin coverage tests..."
make -C tests/riscv/isa run-simx-64
echo "coverage tests done!"
}
usage()
{
echo "usage: regression [-coverage] [-all] [-h|--help]"
}
while [ "$1" != "" ]; do
case $1 in
-coverage ) coverage
;;
-all ) coverage
;;
-h | --help ) usage
exit
;;
* ) usage
exit 1
esac
shift
done

View File

@@ -20,6 +20,19 @@ riscv()
rm -rf riscv-gnu-toolchain rm -rf riscv-gnu-toolchain
} }
riscv64()
{
for x in {a..j}
do
wget $REPOSITORY/riscv64-gnu-toolchain/ubuntu/bionic/riscv64-gnu-toolchain.tar.bz2.parta$x
done
cat riscv64-gnu-toolchain.tar.bz2.parta* > riscv64-gnu-toolchain.tar.bz2
tar -xvf riscv64-gnu-toolchain.tar.bz2
rm -f riscv64-gnu-toolchain.tar.bz2*
cp -r riscv64-gnu-toolchain $DESTDIR
rm -rf riscv64-gnu-toolchain
}
llvm() llvm()
{ {
for x in {a..b} for x in {a..b}
@@ -53,7 +66,7 @@ verilator()
usage() usage()
{ {
echo "usage: toolchain_install [[-riscv] [-llvm] [-pocl] [-verilator] [-all] [-h|--help]]" echo "usage: toolchain_install [[-riscv] [-riscv64] [-llvm] [-pocl] [-verilator] [-all] [-h|--help]]"
} }
while [ "$1" != "" ]; do while [ "$1" != "" ]; do
@@ -64,6 +77,8 @@ while [ "$1" != "" ]; do
;; ;;
-riscv ) riscv -riscv ) riscv
;; ;;
-riscv64 ) riscv64
;;
-llvm ) llvm -llvm ) llvm
;; ;;
-all ) riscv -all ) riscv

View File

@@ -64,7 +64,7 @@ private:
class vx_device { class vx_device {
public: public:
vx_device() vx_device()
: arch_("rv32i", NUM_CORES * NUM_CLUSTERS, NUM_WARPS, NUM_THREADS) : arch_(NUM_CORES * NUM_CLUSTERS, NUM_WARPS, NUM_THREADS)
, ram_(RAM_PAGE_SIZE) , ram_(RAM_PAGE_SIZE)
, processor_(arch_) , processor_(arch_)
, mem_allocator_( , mem_allocator_(

View File

@@ -41,131 +41,131 @@ extern "C" {
void dpi_fadd(bool enable, int a, int b, const svBitVecVal* frm, int* result, svBitVecVal* fflags) { void dpi_fadd(bool enable, int a, int b, const svBitVecVal* frm, int* result, svBitVecVal* fflags) {
if (!enable) if (!enable)
return; return;
*result = rv_fadd(a, b, (*frm & 0x7), fflags); *result = rv_fadd_s(a, b, (*frm & 0x7), fflags);
} }
void dpi_fsub(bool enable, int a, int b, const svBitVecVal* frm, int* result, svBitVecVal* fflags) { void dpi_fsub(bool enable, int a, int b, const svBitVecVal* frm, int* result, svBitVecVal* fflags) {
if (!enable) if (!enable)
return; return;
*result = rv_fsub(a, b, (*frm & 0x7), fflags); *result = rv_fsub_s(a, b, (*frm & 0x7), fflags);
} }
void dpi_fmul(bool enable, int a, int b, const svBitVecVal* frm, int* result, svBitVecVal* fflags) { void dpi_fmul(bool enable, int a, int b, const svBitVecVal* frm, int* result, svBitVecVal* fflags) {
if (!enable) if (!enable)
return; return;
*result = rv_fmul(a, b, (*frm & 0x7), fflags); *result = rv_fmul_s(a, b, (*frm & 0x7), fflags);
} }
void dpi_fmadd(bool enable, int a, int b, int c, const svBitVecVal* frm, int* result, svBitVecVal* fflags) { void dpi_fmadd(bool enable, int a, int b, int c, const svBitVecVal* frm, int* result, svBitVecVal* fflags) {
if (!enable) if (!enable)
return; return;
*result = rv_fmadd(a, b, c, (*frm & 0x7), fflags); *result = rv_fmadd_s(a, b, c, (*frm & 0x7), fflags);
} }
void dpi_fmsub(bool enable, int a, int b, int c, const svBitVecVal* frm, int* result, svBitVecVal* fflags) { void dpi_fmsub(bool enable, int a, int b, int c, const svBitVecVal* frm, int* result, svBitVecVal* fflags) {
if (!enable) if (!enable)
return; return;
*result = rv_fmsub(a, b, c, (*frm & 0x7), fflags); *result = rv_fmsub_s(a, b, c, (*frm & 0x7), fflags);
} }
void dpi_fnmadd(bool enable, int a, int b, int c, const svBitVecVal* frm, int* result, svBitVecVal* fflags) { void dpi_fnmadd(bool enable, int a, int b, int c, const svBitVecVal* frm, int* result, svBitVecVal* fflags) {
if (!enable) if (!enable)
return; return;
*result = rv_fnmadd(a, b, c, (*frm & 0x7), fflags); *result = rv_fnmadd_s(a, b, c, (*frm & 0x7), fflags);
} }
void dpi_fnmsub(bool enable, int a, int b, int c, const svBitVecVal* frm, int* result, svBitVecVal* fflags) { void dpi_fnmsub(bool enable, int a, int b, int c, const svBitVecVal* frm, int* result, svBitVecVal* fflags) {
if (!enable) if (!enable)
return; return;
*result = rv_fnmsub(a, b, c, (*frm & 0x7), fflags); *result = rv_fnmsub_s(a, b, c, (*frm & 0x7), fflags);
} }
void dpi_fdiv(bool enable, int a, int b, const svBitVecVal* frm, int* result, svBitVecVal* fflags) { void dpi_fdiv(bool enable, int a, int b, const svBitVecVal* frm, int* result, svBitVecVal* fflags) {
if (!enable) if (!enable)
return; return;
*result = rv_fdiv(a, b, (*frm & 0x7), fflags); *result = rv_fdiv_s(a, b, (*frm & 0x7), fflags);
} }
void dpi_fsqrt(bool enable, int a, const svBitVecVal* frm, int* result, svBitVecVal* fflags) { void dpi_fsqrt(bool enable, int a, const svBitVecVal* frm, int* result, svBitVecVal* fflags) {
if (!enable) if (!enable)
return; return;
*result = rv_fsqrt(a, (*frm & 0x7), fflags); *result = rv_fsqrt_s(a, (*frm & 0x7), fflags);
} }
void dpi_ftoi(bool enable, int a, const svBitVecVal* frm, int* result, svBitVecVal* fflags) { void dpi_ftoi(bool enable, int a, const svBitVecVal* frm, int* result, svBitVecVal* fflags) {
if (!enable) if (!enable)
return; return;
*result = rv_ftoi(a, (*frm & 0x7), fflags); *result = rv_ftoi_s(a, (*frm & 0x7), fflags);
} }
void dpi_ftou(bool enable, int a, const svBitVecVal* frm, int* result, svBitVecVal* fflags) { void dpi_ftou(bool enable, int a, const svBitVecVal* frm, int* result, svBitVecVal* fflags) {
if (!enable) if (!enable)
return; return;
*result = rv_ftou(a, (*frm & 0x7), fflags); *result = rv_ftou_s(a, (*frm & 0x7), fflags);
} }
void dpi_itof(bool enable, int a, const svBitVecVal* frm, int* result, svBitVecVal* fflags) { void dpi_itof(bool enable, int a, const svBitVecVal* frm, int* result, svBitVecVal* fflags) {
if (!enable) if (!enable)
return; return;
*result = rv_itof(a, (*frm & 0x7), fflags); *result = rv_itof_s(a, (*frm & 0x7), fflags);
} }
void dpi_utof(bool enable, int a, const svBitVecVal* frm, int* result, svBitVecVal* fflags) { void dpi_utof(bool enable, int a, const svBitVecVal* frm, int* result, svBitVecVal* fflags) {
if (!enable) if (!enable)
return; return;
*result = rv_utof(a, (*frm & 0x7), fflags); *result = rv_utof_s(a, (*frm & 0x7), fflags);
} }
void dpi_flt(bool enable, int a, int b, int* result, svBitVecVal* fflags) { void dpi_flt(bool enable, int a, int b, int* result, svBitVecVal* fflags) {
if (!enable) if (!enable)
return; return;
*result = rv_flt(a, b, fflags); *result = rv_flt_s(a, b, fflags);
} }
void dpi_fle(bool enable, int a, int b, int* result, svBitVecVal* fflags) { void dpi_fle(bool enable, int a, int b, int* result, svBitVecVal* fflags) {
if (!enable) if (!enable)
return; return;
*result = rv_fle(a, b, fflags); *result = rv_fle_s(a, b, fflags);
} }
void dpi_feq(bool enable, int a, int b, int* result, svBitVecVal* fflags) { void dpi_feq(bool enable, int a, int b, int* result, svBitVecVal* fflags) {
if (!enable) if (!enable)
return; return;
*result = rv_feq(a, b, fflags); *result = rv_feq_s(a, b, fflags);
} }
void dpi_fmin(bool enable, int a, int b, int* result, svBitVecVal* fflags) { void dpi_fmin(bool enable, int a, int b, int* result, svBitVecVal* fflags) {
if (!enable) if (!enable)
return; return;
*result = rv_fmin(a, b, fflags); *result = rv_fmin_s(a, b, fflags);
} }
void dpi_fmax(bool enable, int a, int b, int* result, svBitVecVal* fflags) { void dpi_fmax(bool enable, int a, int b, int* result, svBitVecVal* fflags) {
if (!enable) if (!enable)
return; return;
*result = rv_fmax(a, b, fflags); *result = rv_fmax_s(a, b, fflags);
} }
void dpi_fclss(bool enable, int a, int* result) { void dpi_fclss(bool enable, int a, int* result) {
if (!enable) if (!enable)
return; return;
*result = rv_fclss(a); *result = rv_fclss_s(a);
} }
void dpi_fsgnj(bool enable, int a, int b, int* result) { void dpi_fsgnj(bool enable, int a, int b, int* result) {
if (!enable) if (!enable)
return; return;
*result = rv_fsgnj(a, b); *result = rv_fsgnj_s(a, b);
} }
void dpi_fsgnjn(bool enable, int a, int b, int* result) { void dpi_fsgnjn(bool enable, int a, int b, int* result) {
if (!enable) if (!enable)
return; return;
*result = rv_fsgnjn(a, b); *result = rv_fsgnjn_s(a, b);
} }
void dpi_fsgnjx(bool enable, int a, int b, int* result) { void dpi_fsgnjx(bool enable, int a, int b, int* result) {
if (!enable) if (!enable)
return; return;
*result = rv_fsgnjx(a, b); *result = rv_fsgnjx_s(a, b);
} }

View File

@@ -481,4 +481,4 @@
`define L3_MRSQ_SIZE 0 `define L3_MRSQ_SIZE 0
`endif `endif
`endif `endif

View File

@@ -1,11 +1,25 @@
RISCV_TOOLCHAIN_PATH ?= /opt/riscv-gnu-toolchain XLEN ?= 32
CC = $(RISCV_TOOLCHAIN_PATH)/bin/riscv32-unknown-elf-gcc ifeq ($(XLEN),32)
AR = $(RISCV_TOOLCHAIN_PATH)/bin/riscv32-unknown-elf-gcc-ar RISCV_TOOLCHAIN_PATH = /opt/riscv-gnu-toolchain
DP = $(RISCV_TOOLCHAIN_PATH)/bin/riscv32-unknown-elf-objdump else
CP = $(RISCV_TOOLCHAIN_PATH)/bin/riscv32-unknown-elf-objcopy RISCV_TOOLCHAIN_PATH = /opt/riscv64-gnu-toolchain
endif
CFLAGS += -O3 -march=rv32imf -mabi=ilp32f -Wstack-usage=1024 -fno-exceptions -fdata-sections -ffunction-sections RISCV_PREFIX ?= riscv$(XLEN)-unknown-elf-
CC = $(RISCV_TOOLCHAIN_PATH)/bin/$(RISCV_PREFIX)gcc
AR = $(RISCV_TOOLCHAIN_PATH)/bin/$(RISCV_PREFIX)gcc-ar
DP = $(RISCV_TOOLCHAIN_PATH)/bin/$(RISCV_PREFIX)objdump
CP = $(RISCV_TOOLCHAIN_PATH)/bin/$(RISCV_PREFIX)objcopy
ifeq ($(XLEN),32)
CFLAGS += -march=rv32imf -mabi=ilp32f
else
CFLAGS += -march=rv64imfd -mabi=lp64d
endif
CFLAGS += -O3 -mcmodel=medany -Wstack-usage=1024 -fno-exceptions -fdata-sections -ffunction-sections
CFLAGS += -I./include -I../hw CFLAGS += -I./include -I../hw
PROJECT = libvortexrt PROJECT = libvortexrt

254
runtime/linker/vx_link64.ld Normal file
View File

@@ -0,0 +1,254 @@
/* ---- Original Script: /opt/riscv32i/riscv32-unknown-elf/lib/ldscripts/elf64lriscv.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("elf64-littleriscv", "elf64-littleriscv", "elf64-littleriscv")
OUTPUT_ARCH(riscv)
ENTRY(_start)
SECTIONS
{
. = 0x80000000;
.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.dyn :
{
*(.rela.init)
*(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
*(.rela.fini)
*(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
*(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
*(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
*(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
*(.rela.ctors)
*(.rela.dtors)
*(.rela.got)
*(.rela.sdata .rela.sdata.* .rela.gnu.linkonce.s.*)
*(.rela.sbss .rela.sbss.* .rela.gnu.linkonce.sb.*)
*(.rela.sdata2 .rela.sdata2.* .rela.gnu.linkonce.s2.*)
*(.rela.sbss2 .rela.sbss2.* .rela.gnu.linkonce.sb2.*)
*(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
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*) }
/* 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*) }
/* Thread Local Storage sections */
.tdata :
{
PROVIDE_HIDDEN (__tdata_start = .);
*(.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_BEGIN__ = .;
*(.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 :
{
__SDATA_BEGIN__ = .;
*(.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 do not
pad the .data section. */
. = ALIGN(. != 0 ? 64 / 8 : 1);
}
. = ALIGN(64 / 8);
. = SEGMENT_START("ldata-segment", .);
. = ALIGN(64 / 8);
__BSS_END__ = .;
__global_pointer = MIN(__SDATA_BEGIN__ + 0x800,
MAX(__DATA_BEGIN__ + 0x800, __BSS_END__ - 0x800));
_end = .; PROVIDE (end = .);
. = DATA_SEGMENT_END (.);
/* .stack_dummy section doesn't contains any symbols. It is only
* used for linker to calculate size of stack sections, and assign
* values to stack symbols later */
.stack_dummy (COPY):
{
KEEP(*(.stack*))
}
__stack_usage = SIZEOF(.stack_dummy);
PROVIDE(__stack_top = 0xFF000000);
PROVIDE(__stack_size = 0x400);
PROVIDE(__stack = __stack_top);
ASSERT(__stack_usage <= __stack_size, "stack overflow")
/* 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) }
.gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
/* 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_*) }
}

View File

@@ -71,9 +71,30 @@ inline uint64_t bit_getw(uint64_t bits, uint32_t start, uint32_t end) {
} }
// Apply integer sign extension // Apply integer sign extension
inline uint32_t sext32(uint32_t word, uint32_t width) { inline uint32_t sext(uint32_t word, uint32_t width) {
assert(width > 1); assert(width > 1);
assert(width <= 32); assert(width <= 32);
uint32_t mask = (1 << width) - 1; if (width == 32)
return word;
uint32_t mask = (uint32_t(1) << width) - 1;
return ((word >> (width - 1)) & 0x1) ? (word | ~mask) : word; return ((word >> (width - 1)) & 0x1) ? (word | ~mask) : word;
} }
inline uint64_t sext(uint64_t word, uint32_t width) {
assert(width > 1);
assert(width <= 64);
if (width == 64)
return word;
uint64_t mask = (uint64_t(1) << width) - 1;
return ((word >> (width - 1)) & 0x1) ? (word | ~mask) : word;
}
inline __uint128_t sext(__uint128_t word, uint32_t width) {
assert(width > 1);
assert(width <= 128);
if (width == 128)
return word;
__uint128_t mask = (__uint128_t(1) << width) - 1;
return ((word >> (width - 1)) & 0x1) ? (word | ~mask) : word;
}

View File

@@ -226,9 +226,9 @@ void RAM::read(void *data, uint64_t addr, uint64_t size) {
} }
void RAM::write(const void *data, uint64_t addr, uint64_t size) { void RAM::write(const void *data, uint64_t addr, uint64_t size) {
const uint8_t* s = (const uint8_t*)data; const uint8_t* d = (const uint8_t*)data;
for (uint64_t i = 0; i < size; i++) { for (uint64_t i = 0; i < size; i++) {
*this->get(addr + i) = s[i]; *this->get(addr + i) = d[i];
} }
} }
@@ -276,7 +276,7 @@ void RAM::loadHexImage(const char* filename) {
ifs.seekg(0, ifs.beg); ifs.seekg(0, ifs.beg);
ifs.read(content.data(), size); ifs.read(content.data(), size);
int offset = 0; uint32_t offset = 0;
char *line = content.data(); char *line = content.data();
this->clear(); this->clear();

View File

@@ -1,5 +1,6 @@
#pragma once #pragma once
#include <cstdint>
#include <vector> #include <vector>
#include <unordered_map> #include <unordered_map>
#include <cstdint> #include <cstdint>

View File

@@ -8,10 +8,13 @@ extern "C" {
} }
#define F32_SIGN 0x80000000 #define F32_SIGN 0x80000000
#define F64_SIGN 0x8000000000000000
inline float32_t to_float32_t(uint32_t x) { return float32_t{x}; } inline float32_t to_float32_t(uint32_t x) { return float32_t{x}; }
inline float64_t to_float64_t(uint64_t x) { return float64_t{x}; }
inline uint32_t from_float32_t(float32_t x) { return uint32_t(x.v); } inline uint32_t from_float32_t(float32_t x) { return uint32_t(x.v); }
inline uint64_t from_float64_t(float64_t x) { return uint64_t(x.v); }
inline uint32_t get_fflags() { inline uint32_t get_fflags() {
uint32_t fflags = softfloat_exceptionFlags; uint32_t fflags = softfloat_exceptionFlags;
@@ -25,121 +28,290 @@ inline uint32_t get_fflags() {
extern "C" { extern "C" {
#endif #endif
uint32_t rv_fadd(uint32_t a, uint32_t b, uint32_t frm, uint32_t* fflags) { uint32_t rv_fadd_s(uint32_t a, uint32_t b, uint32_t frm, uint32_t* fflags) {
softfloat_roundingMode = frm; softfloat_roundingMode = frm;
auto r = f32_add(to_float32_t(a), to_float32_t(b)); auto r = f32_add(to_float32_t(a), to_float32_t(b));
if (fflags) { *fflags = get_fflags(); } if (fflags) { *fflags = get_fflags(); }
return from_float32_t(r); return from_float32_t(r);
} }
uint32_t rv_fsub(uint32_t a, uint32_t b, uint32_t frm, uint32_t* fflags) { uint64_t rv_fadd_d(uint64_t a, uint64_t b, uint32_t frm, uint32_t* fflags) {
softfloat_roundingMode = frm;
auto r = f64_add(to_float64_t(a), to_float64_t(b));
if (fflags) { *fflags = get_fflags(); }
return from_float64_t(r);
}
uint32_t rv_fsub_s(uint32_t a, uint32_t b, uint32_t frm, uint32_t* fflags) {
softfloat_roundingMode = frm; softfloat_roundingMode = frm;
auto r = f32_sub(to_float32_t(a), to_float32_t(b)); auto r = f32_sub(to_float32_t(a), to_float32_t(b));
if (fflags) { *fflags = get_fflags(); } if (fflags) { *fflags = get_fflags(); }
return from_float32_t(r); return from_float32_t(r);
} }
uint32_t rv_fmul(uint32_t a, uint32_t b, uint32_t frm, uint32_t* fflags) { uint64_t rv_fsub_d(uint64_t a, uint64_t b, uint32_t frm, uint32_t* fflags) {
softfloat_roundingMode = frm;
auto r = f64_sub(to_float64_t(a), to_float64_t(b));
if (fflags) { *fflags = get_fflags(); }
return from_float64_t(r);
}
uint32_t rv_fmul_s(uint32_t a, uint32_t b, uint32_t frm, uint32_t* fflags) {
softfloat_roundingMode = frm; softfloat_roundingMode = frm;
auto r = f32_mul(to_float32_t(a), to_float32_t(b)); auto r = f32_mul(to_float32_t(a), to_float32_t(b));
if (fflags) { *fflags = get_fflags(); } if (fflags) { *fflags = get_fflags(); }
return from_float32_t(r); return from_float32_t(r);
} }
uint32_t rv_fmadd(uint32_t a, uint32_t b, uint32_t c, uint32_t frm, uint32_t* fflags) { uint64_t rv_fmul_d(uint64_t a, uint64_t b, uint32_t frm, uint32_t* fflags) {
softfloat_roundingMode = frm;
auto r = f64_mul(to_float64_t(a), to_float64_t(b));
if (fflags) { *fflags = get_fflags(); }
return from_float64_t(r);
}
uint32_t rv_fmadd_s(uint32_t a, uint32_t b, uint32_t c, uint32_t frm, uint32_t* fflags) {
softfloat_roundingMode = frm; softfloat_roundingMode = frm;
auto r = f32_mulAdd(to_float32_t(a), to_float32_t(b), to_float32_t(c)); auto r = f32_mulAdd(to_float32_t(a), to_float32_t(b), to_float32_t(c));
if (fflags) { *fflags = get_fflags(); } if (fflags) { *fflags = get_fflags(); }
return from_float32_t(r); return from_float32_t(r);
} }
uint32_t rv_fmsub(uint32_t a, uint32_t b, uint32_t c, uint32_t frm, uint32_t* fflags) { uint64_t rv_fmadd_d(uint64_t a, uint64_t b, uint64_t c, uint32_t frm, uint32_t* fflags) {
softfloat_roundingMode = frm; softfloat_roundingMode = frm;
int c_neg = c ^ F32_SIGN; auto r = f64_mulAdd(to_float64_t(a), to_float64_t(b), to_float64_t(c));
if (fflags) { *fflags = get_fflags(); }
return from_float64_t(r);
}
uint32_t rv_fmsub_s(uint32_t a, uint32_t b, uint32_t c, uint32_t frm, uint32_t* fflags) {
softfloat_roundingMode = frm;
auto c_neg = c ^ F32_SIGN;
auto r = f32_mulAdd(to_float32_t(a), to_float32_t(b), to_float32_t(c_neg)); auto r = f32_mulAdd(to_float32_t(a), to_float32_t(b), to_float32_t(c_neg));
if (fflags) { *fflags = get_fflags(); } if (fflags) { *fflags = get_fflags(); }
return from_float32_t(r); return from_float32_t(r);
} }
uint32_t rv_fnmadd(uint32_t a, uint32_t b, uint32_t c, uint32_t frm, uint32_t* fflags) { uint64_t rv_fmsub_d(uint64_t a, uint64_t b, uint64_t c, uint32_t frm, uint32_t* fflags) {
softfloat_roundingMode = frm; softfloat_roundingMode = frm;
int a_neg = a ^ F32_SIGN; auto c_neg = c ^ F64_SIGN;
int c_neg = c ^ F32_SIGN; auto r = f64_mulAdd(to_float64_t(a), to_float64_t(b), to_float64_t(c_neg));
if (fflags) { *fflags = get_fflags(); }
return from_float64_t(r);
}
uint32_t rv_fnmadd_s(uint32_t a, uint32_t b, uint32_t c, uint32_t frm, uint32_t* fflags) {
softfloat_roundingMode = frm;
auto a_neg = a ^ F32_SIGN;
auto c_neg = c ^ F32_SIGN;
auto r = f32_mulAdd(to_float32_t(a_neg), to_float32_t(b), to_float32_t(c_neg)); auto r = f32_mulAdd(to_float32_t(a_neg), to_float32_t(b), to_float32_t(c_neg));
if (fflags) { *fflags = get_fflags(); } if (fflags) { *fflags = get_fflags(); }
return from_float32_t(r); return from_float32_t(r);
} }
uint32_t rv_fnmsub(uint32_t a, uint32_t b, uint32_t c, uint32_t frm, uint32_t* fflags) { uint64_t rv_fnmadd_d(uint64_t a, uint64_t b, uint64_t c, uint32_t frm, uint32_t* fflags) {
softfloat_roundingMode = frm; softfloat_roundingMode = frm;
int a_neg = a ^ F32_SIGN; auto a_neg = a ^ F64_SIGN;
auto c_neg = c ^ F64_SIGN;
auto r = f64_mulAdd(to_float64_t(a_neg), to_float64_t(b), to_float64_t(c_neg));
if (fflags) { *fflags = get_fflags(); }
return from_float64_t(r);
}
uint32_t rv_fnmsub_s(uint32_t a, uint32_t b, uint32_t c, uint32_t frm, uint32_t* fflags) {
softfloat_roundingMode = frm;
auto a_neg = a ^ F32_SIGN;
auto r = f32_mulAdd(to_float32_t(a_neg), to_float32_t(b), to_float32_t(c)); auto r = f32_mulAdd(to_float32_t(a_neg), to_float32_t(b), to_float32_t(c));
if (fflags) { *fflags = get_fflags(); } if (fflags) { *fflags = get_fflags(); }
return from_float32_t(r); return from_float32_t(r);
} }
uint32_t rv_fdiv(uint32_t a, uint32_t b, uint32_t frm, uint32_t* fflags) { uint64_t rv_fnmsub_d(uint64_t a, uint64_t b, uint64_t c, uint32_t frm, uint32_t* fflags) {
softfloat_roundingMode = frm;
auto a_neg = a ^ F64_SIGN;
auto r = f64_mulAdd(to_float64_t(a_neg), to_float64_t(b), to_float64_t(c));
if (fflags) { *fflags = get_fflags(); }
return from_float64_t(r);
}
uint32_t rv_fdiv_s(uint32_t a, uint32_t b, uint32_t frm, uint32_t* fflags) {
softfloat_roundingMode = frm; softfloat_roundingMode = frm;
auto r = f32_div(to_float32_t(a), to_float32_t(b)); auto r = f32_div(to_float32_t(a), to_float32_t(b));
if (fflags) { *fflags = get_fflags(); } if (fflags) { *fflags = get_fflags(); }
return from_float32_t(r); return from_float32_t(r);
} }
uint32_t rv_fsqrt(uint32_t a, uint32_t frm, uint32_t* fflags) { uint64_t rv_fdiv_d(uint64_t a, uint64_t b, uint32_t frm, uint32_t* fflags) {
softfloat_roundingMode = frm;
auto r = f64_div(to_float64_t(a), to_float64_t(b));
if (fflags) { *fflags = get_fflags(); }
return from_float64_t(r);
}
uint32_t rv_fsqrt_s(uint32_t a, uint32_t frm, uint32_t* fflags) {
softfloat_roundingMode = frm; softfloat_roundingMode = frm;
auto r = f32_sqrt(to_float32_t(a)); auto r = f32_sqrt(to_float32_t(a));
if (fflags) { *fflags = get_fflags(); } if (fflags) { *fflags = get_fflags(); }
return from_float32_t(r); return from_float32_t(r);
} }
uint32_t rv_ftoi(uint32_t a, uint32_t frm, uint32_t* fflags) { uint64_t rv_fsqrt_d(uint64_t a, uint32_t frm, uint32_t* fflags) {
softfloat_roundingMode = frm;
auto r = f64_sqrt(to_float64_t(a));
if (fflags) { *fflags = get_fflags(); }
return from_float64_t(r);
}
uint32_t rv_ftoi_s(uint32_t a, uint32_t frm, uint32_t* fflags) {
softfloat_roundingMode = frm; softfloat_roundingMode = frm;
auto r = f32_to_i32(to_float32_t(a), frm, true); auto r = f32_to_i32(to_float32_t(a), frm, true);
if (fflags) { *fflags = get_fflags(); } if (fflags) { *fflags = get_fflags(); }
return r; return r;
} }
uint32_t rv_ftou(uint32_t a, uint32_t frm, uint32_t* fflags) { uint32_t rv_ftoi_d(uint64_t a, uint32_t frm, uint32_t* fflags) {
softfloat_roundingMode = frm;
auto r = f64_to_i32(to_float64_t(a), frm, true);
if (fflags) { *fflags = get_fflags(); }
return r;
}
uint32_t rv_ftou_s(uint32_t a, uint32_t frm, uint32_t* fflags) {
softfloat_roundingMode = frm; softfloat_roundingMode = frm;
auto r = f32_to_ui32(to_float32_t(a), frm, true); auto r = f32_to_ui32(to_float32_t(a), frm, true);
if (fflags) { *fflags = get_fflags(); } if (fflags) { *fflags = get_fflags(); }
return r; return r;
} }
uint32_t rv_itof(uint32_t a, uint32_t frm, uint32_t* fflags) { uint32_t rv_ftou_d(uint64_t a, uint32_t frm, uint32_t* fflags) {
softfloat_roundingMode = frm;
auto r = f64_to_ui32(to_float64_t(a), frm, true);
if (fflags) { *fflags = get_fflags(); }
return r;
}
uint64_t rv_ftol_s(uint32_t a, uint32_t frm, uint32_t* fflags) {
softfloat_roundingMode = frm;
auto r = f32_to_i64(to_float32_t(a), frm, true);
if (fflags) { *fflags = get_fflags(); }
return r;
}
uint64_t rv_ftol_d(uint64_t a, uint32_t frm, uint32_t* fflags) {
softfloat_roundingMode = frm;
auto r = f64_to_i64(to_float64_t(a), frm, true);
if (fflags) { *fflags = get_fflags(); }
return r;
}
uint64_t rv_ftolu_s(uint32_t a, uint32_t frm, uint32_t* fflags) {
softfloat_roundingMode = frm;
auto r = f32_to_ui64(to_float32_t(a), frm, true);
if (fflags) { *fflags = get_fflags(); }
return r;
}
uint64_t rv_ftolu_d(uint64_t a, uint32_t frm, uint32_t* fflags) {
softfloat_roundingMode = frm;
auto r = f64_to_ui64(to_float64_t(a), frm, true);
if (fflags) { *fflags = get_fflags(); }
return r;
}
uint32_t rv_itof_s(uint32_t a, uint32_t frm, uint32_t* fflags) {
softfloat_roundingMode = frm; softfloat_roundingMode = frm;
auto r = i32_to_f32(a); auto r = i32_to_f32(a);
if (fflags) { *fflags = get_fflags(); } if (fflags) { *fflags = get_fflags(); }
return from_float32_t(r); return from_float32_t(r);
} }
uint32_t rv_utof(uint32_t a, uint32_t frm, uint32_t* fflags) { uint64_t rv_itof_d(uint32_t a, uint32_t frm, uint32_t* fflags) {
softfloat_roundingMode = frm;
auto r = i32_to_f64(a);
if (fflags) { *fflags = get_fflags(); }
return from_float64_t(r);
}
uint32_t rv_utof_s(uint32_t a, uint32_t frm, uint32_t* fflags) {
softfloat_roundingMode = frm; softfloat_roundingMode = frm;
auto r = ui32_to_f32(a); auto r = ui32_to_f32(a);
if (fflags) { *fflags = get_fflags(); } if (fflags) { *fflags = get_fflags(); }
return from_float32_t(r); return from_float32_t(r);
} }
uint32_t rv_flt(uint32_t a, uint32_t b, uint32_t* fflags) { uint64_t rv_utof_d(uint32_t a, uint32_t frm, uint32_t* fflags) {
softfloat_roundingMode = frm;
auto r = ui32_to_f64(a);
if (fflags) { *fflags = get_fflags(); }
return from_float64_t(r);
}
uint32_t rv_ltof_s(uint64_t a, uint32_t frm, uint32_t* fflags) {
softfloat_roundingMode = frm;
auto r = i64_to_f32(a);
if (fflags) { *fflags = get_fflags(); }
return from_float32_t(r);
}
uint64_t rv_ltof_d(uint64_t a, uint32_t frm, uint32_t* fflags) {
softfloat_roundingMode = frm;
auto r = i64_to_f64(a);
if (fflags) { *fflags = get_fflags(); }
return from_float64_t(r);
}
uint32_t rv_lutof_s(uint64_t a, uint32_t frm, uint32_t* fflags) {
softfloat_roundingMode = frm;
auto r = ui64_to_f32(a);
if (fflags) { *fflags = get_fflags(); }
return from_float32_t(r);
}
uint64_t rv_lutof_d(uint64_t a, uint32_t frm, uint32_t* fflags) {
softfloat_roundingMode = frm;
auto r = ui64_to_f64(a);
if (fflags) { *fflags = get_fflags(); }
return from_float64_t(r);
}
bool rv_flt_s(uint32_t a, uint32_t b, uint32_t* fflags) {
auto r = f32_lt(to_float32_t(a), to_float32_t(b)); auto r = f32_lt(to_float32_t(a), to_float32_t(b));
if (fflags) { *fflags = get_fflags(); } if (fflags) { *fflags = get_fflags(); }
return r; return r;
} }
uint32_t rv_fle(uint32_t a, uint32_t b, uint32_t* fflags) { bool rv_flt_d(uint64_t a, uint64_t b, uint32_t* fflags) {
auto r = f64_lt(to_float64_t(a), to_float64_t(b));
if (fflags) { *fflags = get_fflags(); }
return r;
}
bool rv_fle_s(uint32_t a, uint32_t b, uint32_t* fflags) {
auto r = f32_le(to_float32_t(a), to_float32_t(b)); auto r = f32_le(to_float32_t(a), to_float32_t(b));
if (fflags) { *fflags = get_fflags(); } if (fflags) { *fflags = get_fflags(); }
return r; return r;
} }
uint32_t rv_feq(uint32_t a, uint32_t b, uint32_t* fflags) { bool rv_fle_d(uint64_t a, uint64_t b, uint32_t* fflags) {
auto r = f64_le(to_float64_t(a), to_float64_t(b));
if (fflags) { *fflags = get_fflags(); }
return r;
}
bool rv_feq_s(uint32_t a, uint32_t b, uint32_t* fflags) {
auto r = f32_eq(to_float32_t(a), to_float32_t(b)); auto r = f32_eq(to_float32_t(a), to_float32_t(b));
if (fflags) { *fflags = get_fflags(); } if (fflags) { *fflags = get_fflags(); }
return r; return r;
} }
uint32_t rv_fmin(uint32_t a, uint32_t b, uint32_t* fflags) { bool rv_feq_d(uint64_t a, uint64_t b, uint32_t* fflags) {
int r; auto r = f64_eq(to_float64_t(a), to_float64_t(b));
if (fflags) { *fflags = get_fflags(); }
return r;
}
uint32_t rv_fmin_s(uint32_t a, uint32_t b, uint32_t* fflags) {
uint32_t r;
if (isNaNF32UI(a) && isNaNF32UI(b)) { if (isNaNF32UI(a) && isNaNF32UI(b)) {
r = defaultNaNF32UI; r = defaultNaNF32UI;
} else { } else {
@@ -156,8 +328,26 @@ uint32_t rv_fmin(uint32_t a, uint32_t b, uint32_t* fflags) {
return r; return r;
} }
uint32_t rv_fmax(uint32_t a, uint32_t b, uint32_t* fflags) { uint64_t rv_fmin_d(uint64_t a, uint64_t b, uint32_t* fflags) {
int r; uint64_t r;
if (isNaNF64UI(a) && isNaNF64UI(b)) {
r = defaultNaNF64UI;
} else {
auto fa = to_float64_t(a);
auto fb = to_float64_t(b);
if ((f64_lt_quiet(fa, fb) || (f64_eq(fa, fb) && (a & F64_SIGN)))
|| isNaNF64UI(b)) {
r = a;
} else {
r = b;
}
}
if (fflags) { *fflags = get_fflags(); }
return r;
}
uint32_t rv_fmax_s(uint32_t a, uint32_t b, uint32_t* fflags) {
uint32_t r;
if (isNaNF32UI(a) && isNaNF32UI(b)) { if (isNaNF32UI(a) && isNaNF32UI(b)) {
r = defaultNaNF32UI; r = defaultNaNF32UI;
} else { } else {
@@ -174,7 +364,25 @@ uint32_t rv_fmax(uint32_t a, uint32_t b, uint32_t* fflags) {
return r; return r;
} }
uint32_t rv_fclss(uint32_t a) { uint64_t rv_fmax_d(uint64_t a, uint64_t b, uint32_t* fflags) {
uint64_t r;
if (isNaNF64UI(a) && isNaNF64UI(b)) {
r = defaultNaNF64UI;
} else {
auto fa = to_float64_t(a);
auto fb = to_float64_t(b);
if ((f64_lt_quiet(fb, fa) || (f64_eq(fb, fa) && (b & F64_SIGN)))
|| isNaNF64UI(b)) {
r = a;
} else {
r = b;
}
}
if (fflags) { *fflags = get_fflags(); }
return r;
}
uint32_t rv_fclss_s(uint32_t a) {
auto infOrNaN = (0xff == expF32UI(a)); auto infOrNaN = (0xff == expF32UI(a));
auto subnormOrZero = (0 == expF32UI(a)); auto subnormOrZero = (0 == expF32UI(a));
bool sign = signF32UI(a); bool sign = signF32UI(a);
@@ -182,7 +390,7 @@ uint32_t rv_fclss(uint32_t a) {
bool isNaN = isNaNF32UI(a); bool isNaN = isNaNF32UI(a);
bool isSNaN = softfloat_isSigNaNF32UI(a); bool isSNaN = softfloat_isSigNaNF32UI(a);
int r = uint32_t r =
( sign && infOrNaN && fracZero ) << 0 | ( sign && infOrNaN && fracZero ) << 0 |
( sign && !infOrNaN && !subnormOrZero ) << 1 | ( sign && !infOrNaN && !subnormOrZero ) << 1 |
( sign && subnormOrZero && !fracZero ) << 2 | ( sign && subnormOrZero && !fracZero ) << 2 |
@@ -197,31 +405,77 @@ uint32_t rv_fclss(uint32_t a) {
return r; return r;
} }
uint32_t rv_fsgnj(uint32_t a, uint32_t b) { uint32_t rv_fclss_d(uint64_t a) {
auto infOrNaN = (0x7ff == expF64UI(a));
int sign = b & F32_SIGN; auto subnormOrZero = (0 == expF64UI(a));
int r = sign | (a & ~F32_SIGN); bool sign = signF64UI(a);
bool fracZero = (0 == fracF64UI(a));
bool isNaN = isNaNF64UI(a);
bool isSNaN = softfloat_isSigNaNF64UI(a);
uint32_t r =
( sign && infOrNaN && fracZero ) << 0 |
( sign && !infOrNaN && !subnormOrZero ) << 1 |
( sign && subnormOrZero && !fracZero ) << 2 |
( sign && subnormOrZero && fracZero ) << 3 |
( !sign && infOrNaN && fracZero ) << 7 |
( !sign && !infOrNaN && !subnormOrZero ) << 6 |
( !sign && subnormOrZero && !fracZero ) << 5 |
( !sign && subnormOrZero && fracZero ) << 4 |
( isNaN && isSNaN ) << 8 |
( isNaN && !isSNaN ) << 9;
return r; return r;
} }
uint32_t rv_fsgnjn(uint32_t a, uint32_t b) { uint32_t rv_fsgnj_s(uint32_t a, uint32_t b) {
auto sign = b & F32_SIGN;
int sign = ~b & F32_SIGN; auto r = sign | (a & ~F32_SIGN);
int r = sign | (a & ~F32_SIGN);
return r; return r;
} }
uint32_t rv_fsgnjx(uint32_t a, uint32_t b) { uint64_t rv_fsgnj_d(uint64_t a, uint64_t b) {
auto sign = b & F64_SIGN;
int sign1 = a & F32_SIGN; auto r = sign | (a & ~F64_SIGN);
int sign2 = b & F32_SIGN;
int r = (sign1 ^ sign2) | (a & ~F32_SIGN);
return r; return r;
} }
uint32_t rv_fsgnjn_s(uint32_t a, uint32_t b) {
auto sign = ~b & F32_SIGN;
auto r = sign | (a & ~F32_SIGN);
return r;
}
uint64_t rv_fsgnjn_d(uint64_t a, uint64_t b) {
auto sign = ~b & F64_SIGN;
auto r = sign | (a & ~F64_SIGN);
return r;
}
uint32_t rv_fsgnjx_s(uint32_t a, uint32_t b) {
auto sign1 = a & F32_SIGN;
auto sign2 = b & F32_SIGN;
auto r = (sign1 ^ sign2) | (a & ~F32_SIGN);
return r;
}
uint64_t rv_fsgnjx_d(uint64_t a, uint64_t b) {
auto sign1 = a & F64_SIGN;
auto sign2 = b & F64_SIGN;
auto r = (sign1 ^ sign2) | (a & ~F64_SIGN);
return r;
}
uint32_t rv_dtof(uint64_t a) {
auto r = f64_to_f32(to_float64_t(a));
return from_float32_t(r);
}
uint64_t rv_ftod(uint32_t a) {
auto r = f32_to_f64(to_float32_t(a));
return from_float64_t(r);
}
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif

View File

@@ -7,32 +7,73 @@
extern "C" { extern "C" {
#endif #endif
uint32_t rv_fadd(uint32_t a, uint32_t b, uint32_t frm, uint32_t* fflags); uint32_t rv_fadd_s(uint32_t a, uint32_t b, uint32_t frm, uint32_t* fflags);
uint32_t rv_fsub(uint32_t a, uint32_t b, uint32_t frm, uint32_t* fflags); uint32_t rv_fsub_s(uint32_t a, uint32_t b, uint32_t frm, uint32_t* fflags);
uint32_t rv_fmul(uint32_t a, uint32_t b, uint32_t frm, uint32_t* fflags); uint32_t rv_fmul_s(uint32_t a, uint32_t b, uint32_t frm, uint32_t* fflags);
uint32_t rv_fmadd(uint32_t a, uint32_t b, uint32_t c, uint32_t frm, uint32_t* fflags); uint32_t rv_fmadd_s(uint32_t a, uint32_t b, uint32_t c, uint32_t frm, uint32_t* fflags);
uint32_t rv_fmsub(uint32_t a, uint32_t b, uint32_t c, uint32_t frm, uint32_t* fflags); uint32_t rv_fmsub_s(uint32_t a, uint32_t b, uint32_t c, uint32_t frm, uint32_t* fflags);
uint32_t rv_fnmadd(uint32_t a, uint32_t b, uint32_t c, uint32_t frm, uint32_t* fflags); uint32_t rv_fnmadd_s(uint32_t a, uint32_t b, uint32_t c, uint32_t frm, uint32_t* fflags);
uint32_t rv_fnmsub(uint32_t a, uint32_t b, uint32_t c, uint32_t frm, uint32_t* fflags); uint32_t rv_fnmsub_s(uint32_t a, uint32_t b, uint32_t c, uint32_t frm, uint32_t* fflags);
uint32_t rv_fdiv_s(uint32_t a, uint32_t b, uint32_t frm, uint32_t* fflags);
uint32_t rv_fsqrt_s(uint32_t a, uint32_t frm, uint32_t* fflags);
uint32_t rv_fdiv(uint32_t a, uint32_t b, uint32_t frm, uint32_t* fflags); uint32_t rv_ftoi_s(uint32_t a, uint32_t frm, uint32_t* fflags);
uint32_t rv_fsqrt(uint32_t a, uint32_t frm, uint32_t* fflags); uint32_t rv_ftou_s(uint32_t a, uint32_t frm, uint32_t* fflags);
uint32_t rv_itof_s(uint32_t a, uint32_t frm, uint32_t* fflags);
uint32_t rv_utof_s(uint32_t a, uint32_t frm, uint32_t* fflags);
uint32_t rv_ftoi(uint32_t a, uint32_t frm, uint32_t* fflags); uint64_t rv_ftol_s(uint32_t a, uint32_t frm, uint32_t* fflags);
uint32_t rv_ftou(uint32_t a, uint32_t frm, uint32_t* fflags); uint64_t rv_ftolu_s(uint32_t a, uint32_t frm, uint32_t* fflags);
uint32_t rv_itof(uint32_t a, uint32_t frm, uint32_t* fflags); uint32_t rv_ltof_s(uint64_t a, uint32_t frm, uint32_t* fflags);
uint32_t rv_utof(uint32_t a, uint32_t frm, uint32_t* fflags); uint32_t rv_lutof_s(uint64_t a, uint32_t frm, uint32_t* fflags);
uint32_t rv_fclss(uint32_t a); uint32_t rv_fclss_s(uint32_t a);
uint32_t rv_fsgnj(uint32_t a, uint32_t b);
uint32_t rv_fsgnjn(uint32_t a, uint32_t b);
uint32_t rv_fsgnjx(uint32_t a, uint32_t b);
uint32_t rv_flt(uint32_t a, uint32_t b, uint32_t* fflags); uint32_t rv_fsgnj_s(uint32_t a, uint32_t b);
uint32_t rv_fle(uint32_t a, uint32_t b, uint32_t* fflags); uint32_t rv_fsgnjn_s(uint32_t a, uint32_t b);
uint32_t rv_feq(uint32_t a, uint32_t b, uint32_t* fflags); uint32_t rv_fsgnjx_s(uint32_t a, uint32_t b);
uint32_t rv_fmin(uint32_t a, uint32_t b, uint32_t* fflags);
uint32_t rv_fmax(uint32_t a, uint32_t b, uint32_t* fflags); bool rv_flt_s(uint32_t a, uint32_t b, uint32_t* fflags);
bool rv_fle_s(uint32_t a, uint32_t b, uint32_t* fflags);
bool rv_feq_s(uint32_t a, uint32_t b, uint32_t* fflags);
uint32_t rv_fmin_s(uint32_t a, uint32_t b, uint32_t* fflags);
uint32_t rv_fmax_s(uint32_t a, uint32_t b, uint32_t* fflags);
///////////////////////////////////////////////////////////////////////////////
uint64_t rv_fadd_d(uint64_t a, uint64_t b, uint32_t frm, uint32_t* fflags);
uint64_t rv_fsub_d(uint64_t a, uint64_t b, uint32_t frm, uint32_t* fflags);
uint64_t rv_fmul_d(uint64_t a, uint64_t b, uint32_t frm, uint32_t* fflags);
uint64_t rv_fdiv_d(uint64_t a, uint64_t b, uint32_t frm, uint32_t* fflags);
uint64_t rv_fsqrt_d(uint64_t a, uint32_t frm, uint32_t* fflags);
uint64_t rv_fmadd_d(uint64_t a, uint64_t b, uint64_t c, uint32_t frm, uint32_t* fflags);
uint64_t rv_fmsub_d(uint64_t a, uint64_t b, uint64_t c, uint32_t frm, uint32_t* fflags);
uint64_t rv_fnmadd_d(uint64_t a, uint64_t b, uint64_t c, uint32_t frm, uint32_t* fflags);
uint64_t rv_fnmsub_d(uint64_t a, uint64_t b, uint64_t c, uint32_t frm, uint32_t* fflags);
uint32_t rv_ftoi_d(uint64_t a, uint32_t frm, uint32_t* fflags);
uint32_t rv_ftou_d(uint64_t a, uint32_t frm, uint32_t* fflags);
uint64_t rv_ftol_d(uint64_t a, uint32_t frm, uint32_t* fflags);
uint64_t rv_ftolu_d(uint64_t a, uint32_t frm, uint32_t* fflags);
uint64_t rv_itof_d(uint32_t a, uint32_t frm, uint32_t* fflags);
uint64_t rv_utof_d(uint32_t a, uint32_t frm, uint32_t* fflags);
uint64_t rv_ltof_d(uint64_t a, uint32_t frm, uint32_t* fflags);
uint64_t rv_lutof_d(uint64_t a, uint32_t frm, uint32_t* fflags);
uint32_t rv_fclss_d(uint64_t a);
uint64_t rv_fsgnj_d(uint64_t a, uint64_t b);
uint64_t rv_fsgnjn_d(uint64_t a, uint64_t b);
uint64_t rv_fsgnjx_d(uint64_t a, uint64_t b);
bool rv_flt_d(uint64_t a, uint64_t b, uint32_t* fflags);
bool rv_fle_d(uint64_t a, uint64_t b, uint32_t* fflags);
bool rv_feq_d(uint64_t a, uint64_t b, uint32_t* fflags);
uint64_t rv_fmin_d(uint64_t a, uint64_t b, uint32_t* fflags);
uint64_t rv_fmax_d(uint64_t a, uint64_t b, uint32_t* fflags);
uint32_t rv_dtof(uint64_t a);
uint64_t rv_ftod(uint32_t a);
#ifdef __cplusplus #ifdef __cplusplus
} }

View File

@@ -56,7 +56,7 @@ inline void Unpack8888(TexFormat format,
uint32_t texel, uint32_t texel,
uint32_t* lo, uint32_t* lo,
uint32_t* hi) { uint32_t* hi) {
int r, g, b, a; uint32_t r, g, b, a;
switch (format) { switch (format) {
case TexFormat::A8R8G8B8: case TexFormat::A8R8G8B8:
r = (texel >> 16) & 0xff; r = (texel >> 16) & 0xff;

View File

@@ -29,6 +29,11 @@ else
CXXFLAGS += -O2 -DNDEBUG CXXFLAGS += -O2 -DNDEBUG
endif endif
# XLEN parameterization
ifdef XLEN
CXXFLAGS += -DXLEN=$(XLEN)
endif
PROJECT = simx PROJECT = simx
all: $(DESTDIR)/$(PROJECT) all: $(DESTDIR)/$(PROJECT)
@@ -43,4 +48,4 @@ $(DESTDIR)/lib$(PROJECT).so: $(SRCS)
$(CXX) $(CXXFLAGS) -MM $^ > .depend; $(CXX) $(CXXFLAGS) -MM $^ > .depend;
clean: clean:
rm -rf obj_dir $(DESTDIR)/$(PROJECT) $(DESTDIR)/lib$(PROJECT).so rm -rf obj_dir $(DESTDIR)/$(PROJECT) $(DESTDIR)/lib$(PROJECT).so

View File

@@ -21,8 +21,7 @@ private:
uint16_t num_barriers_; uint16_t num_barriers_;
public: public:
ArchDef(const std::string& /*arch*/, ArchDef(uint16_t num_cores,
uint16_t num_cores,
uint16_t num_warps, uint16_t num_warps,
uint16_t num_threads) uint16_t num_threads)
: num_cores_(num_cores) : num_cores_(num_cores)

View File

@@ -488,11 +488,11 @@ private:
} else { } else {
bool hit = false; bool hit = false;
bool found_free_block = false; bool found_free_block = false;
int hit_block_id = 0; uint32_t hit_block_id = 0;
int repl_block_id = 0; uint32_t repl_block_id = 0;
uint32_t max_cnt = 0; uint32_t max_cnt = 0;
for (int i = 0, n = set.blocks.size(); i < n; ++i) { for (uint32_t i = 0, n = set.blocks.size(); i < n; ++i) {
auto& block = set.blocks.at(i); auto& block = set.blocks.at(i);
if (block.valid) { if (block.valid) {
if (block.tag == pipeline_req.tag) { if (block.tag == pipeline_req.tag) {

View File

@@ -16,7 +16,7 @@ namespace vortex {
enum Constants { enum Constants {
SMEM_BANK_OFFSET = log2ceil(sizeof(Word)) + log2ceil(STACK_SIZE / sizeof(Word)), SMEM_BANK_OFFSET = log2ceil(sizeof(uint32_t)) + log2ceil(STACK_SIZE / sizeof(uint32_t)),
}; };

View File

@@ -13,7 +13,7 @@
using namespace vortex; using namespace vortex;
Core::Core(const SimContext& ctx, const ArchDef &arch, Word id) Core::Core(const SimContext& ctx, const ArchDef &arch, uint32_t id)
: SimObject(ctx, "Core") : SimObject(ctx, "Core")
, MemRspPort(this) , MemRspPort(this)
, MemReqPort(this) , MemReqPort(this)
@@ -73,7 +73,7 @@ Core::Core(const SimContext& ctx, const ArchDef &arch, Word id)
, decode_latch_("decode") , decode_latch_("decode")
, pending_icache_(arch_.num_warps()) , pending_icache_(arch_.num_warps())
{ {
for (int i = 0; i < arch_.num_warps(); ++i) { for (uint32_t i = 0; i < arch_.num_warps(); ++i) {
warps_.at(i) = std::make_shared<Warp>(this, i); warps_.at(i) = std::make_shared<Warp>(this, i);
} }
@@ -195,7 +195,7 @@ void Core::tick() {
void Core::schedule() { void Core::schedule() {
bool foundSchedule = false; bool foundSchedule = false;
int scheduled_warp = last_schedule_wid_; uint32_t scheduled_warp = last_schedule_wid_;
// round robin scheduling // round robin scheduling
for (size_t wid = 0, nw = arch_.num_warps(); wid < nw; ++wid) { for (size_t wid = 0, nw = arch_.num_warps(); wid < nw; ++wid) {
@@ -367,11 +367,11 @@ void Core::commit() {
} }
} }
WarpMask Core::wspawn(int num_warps, int nextPC) { WarpMask Core::wspawn(uint32_t num_warps, uint32_t nextPC) {
WarpMask ret(1); WarpMask ret(1);
int active_warps = std::min<int>(num_warps, arch_.num_warps()); uint32_t active_warps = std::min<uint32_t>(num_warps, arch_.num_warps());
DP(3, "*** Activate " << (active_warps-1) << " warps at PC: " << std::hex << nextPC); DP(3, "*** Activate " << (active_warps-1) << " warps at PC: " << std::hex << nextPC);
for (int i = 1; i < active_warps; ++i) { for (uint32_t i = 1; i < active_warps; ++i) {
auto warp = warps_.at(i); auto warp = warps_.at(i);
warp->setPC(nextPC); warp->setPC(nextPC);
warp->setTmask(0, true); warp->setTmask(0, true);
@@ -380,7 +380,7 @@ WarpMask Core::wspawn(int num_warps, int nextPC) {
return ret; return ret;
} }
WarpMask Core::barrier(int bar_id, int count, int warp_id) { WarpMask Core::barrier(uint32_t bar_id, uint32_t count, uint32_t warp_id) {
WarpMask ret(0); WarpMask ret(0);
auto& barrier = barriers_.at(bar_id); auto& barrier = barriers_.at(bar_id);
barrier.set(warp_id); barrier.set(warp_id);
@@ -389,7 +389,7 @@ WarpMask Core::barrier(int bar_id, int count, int warp_id) {
DP(3, "*** Suspend warp #" << warp_id << " at barrier #" << bar_id); DP(3, "*** Suspend warp #" << warp_id << " at barrier #" << bar_id);
return ret; return ret;
} }
for (int i = 0; i < arch_.num_warps(); ++i) { for (uint32_t i = 0; i < arch_.num_warps(); ++i) {
if (barrier.test(i)) { if (barrier.test(i)) {
DP(3, "*** Resume warp #" << i << " at barrier #" << bar_id); DP(3, "*** Resume warp #" << i << " at barrier #" << bar_id);
warps_.at(i)->activate(); warps_.at(i)->activate();
@@ -400,45 +400,45 @@ WarpMask Core::barrier(int bar_id, int count, int warp_id) {
return ret; return ret;
} }
Word Core::icache_read(Addr addr, Size size) { void Core::icache_read(void *data, uint64_t addr, uint32_t size) {
Word data; mmu_.read(data, addr, size, 0);
mmu_.read(&data, addr, size, 0);
return data;
} }
Word Core::dcache_read(Addr addr, Size size) { void Core::dcache_read(void *data, uint64_t addr, uint32_t size) {
Word data;
auto type = get_addr_type(addr, size); auto type = get_addr_type(addr, size);
if (type == AddrType::Shared) { if (type == AddrType::Shared) {
smem_.read(&data, addr & (SMEM_SIZE-1), size); addr &= (SMEM_SIZE-1);
smem_.read(data, addr, size);
} else { } else {
mmu_.read(&data, addr, size, 0); mmu_.read(data, addr, size, 0);
} }
return data;
} }
void Core::dcache_write(Addr addr, Word data, Size size) { void Core::dcache_write(const void* data, uint64_t addr, uint32_t size) {
if (addr >= IO_COUT_ADDR if (addr >= IO_COUT_ADDR
&& addr < (IO_COUT_ADDR + IO_COUT_SIZE)) { && addr <= (IO_COUT_ADDR + IO_COUT_SIZE - 1)) {
this->writeToStdOut(addr, data); this->writeToStdOut(data, addr, size);
} else { } else {
auto type = get_addr_type(addr, size); auto type = get_addr_type(addr, size);
if (type == AddrType::Shared) { if (type == AddrType::Shared) {
smem_.write(&data, addr & (SMEM_SIZE-1), size); addr &= (SMEM_SIZE-1);
smem_.write(data, addr, size);
} else { } else {
mmu_.write(&data, addr, size, 0); mmu_.write(data, addr, size, 0);
} }
} }
} }
Word Core::tex_read(uint32_t unit, Word u, Word v, Word lod, std::vector<mem_addr_size_t>* mem_addrs) { uint32_t Core::tex_read(uint32_t unit, uint32_t u, uint32_t v, uint32_t lod, std::vector<mem_addr_size_t>* mem_addrs) {
return tex_units_.at(unit).read(u, v, lod, mem_addrs); return tex_units_.at(unit).read(u, v, lod, mem_addrs);
} }
void Core::writeToStdOut(Addr addr, Word data) { void Core::writeToStdOut(const void* data, uint64_t addr, uint32_t size) {
if (size != 1)
std::abort();
uint32_t tid = (addr - IO_COUT_ADDR) & (IO_COUT_SIZE-1); uint32_t tid = (addr - IO_COUT_ADDR) & (IO_COUT_SIZE-1);
auto& ss_buf = print_bufs_[tid]; auto& ss_buf = print_bufs_[tid];
char c = (char)data; char c = *(char*)data;
ss_buf << c; ss_buf << c;
if (c == '\n') { if (c == '\n') {
std::cout << std::dec << "#" << tid << ": " << ss_buf.str() << std::flush; std::cout << std::dec << "#" << tid << ": " << ss_buf.str() << std::flush;
@@ -446,7 +446,7 @@ void Core::writeToStdOut(Addr addr, Word data) {
} }
} }
Word Core::get_csr(Addr addr, int tid, int wid) { uint32_t Core::get_csr(uint32_t addr, uint32_t tid, uint32_t wid) {
switch (addr) { switch (addr) {
case CSR_SATP: case CSR_SATP:
case CSR_PMPCFG0: case CSR_PMPCFG0:
@@ -502,13 +502,13 @@ Word Core::get_csr(Addr addr, int tid, int wid) {
return perf_stats_.instrs & 0xffffffff; return perf_stats_.instrs & 0xffffffff;
case CSR_MINSTRET_H: case CSR_MINSTRET_H:
// NumInsts // NumInsts
return (Word)(perf_stats_.instrs >> 32); return (uint32_t)(perf_stats_.instrs >> 32);
case CSR_MCYCLE: case CSR_MCYCLE:
// NumCycles // NumCycles
return (Word)SimPlatform::instance().cycles(); return (uint32_t)SimPlatform::instance().cycles();
case CSR_MCYCLE_H: case CSR_MCYCLE_H:
// NumCycles // NumCycles
return (Word)(SimPlatform::instance().cycles() >> 32); return (uint32_t)(SimPlatform::instance().cycles() >> 32);
case CSR_MPM_IBUF_ST: case CSR_MPM_IBUF_ST:
return perf_stats_.ibuf_stalls & 0xffffffff; return perf_stats_.ibuf_stalls & 0xffffffff;
case CSR_MPM_IBUF_ST_H: case CSR_MPM_IBUF_ST_H:
@@ -644,7 +644,7 @@ Word Core::get_csr(Addr addr, int tid, int wid) {
return 0; return 0;
} }
void Core::set_csr(Addr addr, Word value, int /*tid*/, int wid) { void Core::set_csr(uint32_t addr, uint32_t value, uint32_t /*tid*/, uint32_t wid) {
if (addr == CSR_FFLAGS) { if (addr == CSR_FFLAGS) {
fcsrs_.at(wid) = (fcsrs_.at(wid) & ~0x1F) | (value & 0x1F); fcsrs_.at(wid) = (fcsrs_.at(wid) & ~0x1F) | (value & 0x1F);
} else if (addr == CSR_FRM) { } else if (addr == CSR_FRM) {

View File

@@ -68,7 +68,7 @@ public:
SimPort<MemRsp> MemRspPort; SimPort<MemRsp> MemRspPort;
SimPort<MemReq> MemReqPort; SimPort<MemReq> MemReqPort;
Core(const SimContext& ctx, const ArchDef &arch, Word id); Core(const SimContext& ctx, const ArchDef &arch, uint32_t id);
~Core(); ~Core();
void attach_ram(RAM* ram); void attach_ram(RAM* ram);
@@ -79,7 +79,7 @@ public:
void tick(); void tick();
Word id() const { uint32_t id() const {
return id_; return id_;
} }
@@ -95,25 +95,25 @@ public:
return perf_stats_; return perf_stats_;
} }
Word getIRegValue(int reg) const { uint32_t getIRegValue(int reg) const {
return warps_.at(0)->getIRegValue(reg); return warps_.at(0)->getIRegValue(reg);
} }
Word get_csr(Addr addr, int tid, int wid); uint32_t get_csr(uint32_t addr, uint32_t tid, uint32_t wid);
void set_csr(Addr addr, Word value, int tid, int wid); void set_csr(uint32_t addr, uint32_t value, uint32_t tid, uint32_t wid);
WarpMask wspawn(int num_warps, int nextPC); WarpMask wspawn(uint32_t num_warps, uint32_t nextPC);
WarpMask barrier(int bar_id, int count, int warp_id); WarpMask barrier(uint32_t bar_id, uint32_t count, uint32_t warp_id);
Word icache_read(Addr, Size); void icache_read(void* data, uint64_t addr, uint32_t size);
Word dcache_read(Addr, Size); void dcache_read(void* data, uint64_t addr, uint32_t size);
void dcache_write(Addr, Word, Size); void dcache_write(const void* data, uint64_t addr, uint32_t size);
Word tex_read(uint32_t unit, Word lod, Word u, Word v, std::vector<mem_addr_size_t>* mem_addrs); uint32_t tex_read(uint32_t unit, uint32_t lod, uint32_t u, uint32_t v, std::vector<mem_addr_size_t>* mem_addrs);
void trigger_ecall(); void trigger_ecall();
@@ -129,11 +129,11 @@ private:
void execute(); void execute();
void commit(); void commit();
void writeToStdOut(Addr addr, Word data); void writeToStdOut(const void* data, uint64_t addr, uint32_t size);
void cout_flush(); void cout_flush();
Word id_; uint32_t id_;
const ArchDef arch_; const ArchDef arch_;
const Decoder decoder_; const Decoder decoder_;
MemoryUnit mmu_; MemoryUnit mmu_;
@@ -142,7 +142,7 @@ private:
std::vector<std::shared_ptr<Warp>> warps_; std::vector<std::shared_ptr<Warp>> warps_;
std::vector<WarpMask> barriers_; std::vector<WarpMask> barriers_;
std::vector<Word> csrs_; std::vector<uint32_t> csrs_;
std::vector<Byte> fcsrs_; std::vector<Byte> fcsrs_;
std::vector<IBuffer> ibuffers_; std::vector<IBuffer> ibuffers_;
Scoreboard scoreboard_; Scoreboard scoreboard_;

View File

@@ -19,7 +19,7 @@ struct InstTableEntry_t {
InstType iType; InstType iType;
}; };
static const std::unordered_map<int, struct InstTableEntry_t> sc_instTable = { static const std::unordered_map<Opcode, struct InstTableEntry_t> sc_instTable = {
{Opcode::NOP, {false, InstType::N_TYPE}}, {Opcode::NOP, {false, InstType::N_TYPE}},
{Opcode::R_INST, {false, InstType::R_TYPE}}, {Opcode::R_INST, {false, InstType::R_TYPE}},
{Opcode::L_INST, {false, InstType::I_TYPE}}, {Opcode::L_INST, {false, InstType::I_TYPE}},
@@ -42,15 +42,54 @@ static const std::unordered_map<int, struct InstTableEntry_t> sc_instTable = {
{Opcode::VSET, {false, InstType::V_TYPE}}, {Opcode::VSET, {false, InstType::V_TYPE}},
{Opcode::GPGPU, {false, InstType::R_TYPE}}, {Opcode::GPGPU, {false, InstType::R_TYPE}},
{Opcode::GPU, {false, InstType::R4_TYPE}}, {Opcode::GPU, {false, InstType::R4_TYPE}},
{Opcode::R_INST_W, {false, InstType::R_TYPE}},
{Opcode::I_INST_W, {false, InstType::I_TYPE}},
};
enum Constants {
width_opcode= 7,
width_reg = 5,
width_func2 = 2,
width_func3 = 3,
width_func6 = 6,
width_func7 = 7,
width_mop = 3,
width_vmask = 1,
width_i_imm = 12,
width_j_imm = 20,
width_v_imm = 11,
shift_opcode= 0,
shift_rd = width_opcode,
shift_func3 = shift_rd + width_reg,
shift_rs1 = shift_func3 + width_func3,
shift_rs2 = shift_rs1 + width_reg,
shift_func2 = shift_rs2 + width_reg,
shift_func7 = shift_rs2 + width_reg,
shift_rs3 = shift_func7 + width_func2,
shift_vmop = shift_func7 + width_vmask,
shift_vnf = shift_vmop + width_mop,
shift_func6 = shift_func7 + width_vmask,
shift_vset = shift_func7 + width_func6,
mask_opcode = (1<<width_opcode)-1,
mask_reg = (1<<width_reg)-1,
mask_func2 = (1<<width_func2)-1,
mask_func3 = (1<<width_func3)-1,
mask_func6 = (1<<width_func6)-1,
mask_func7 = (1<<width_func7)-1,
mask_i_imm = (1<<width_i_imm)-1,
mask_j_imm = (1<<width_j_imm)-1,
mask_v_imm = (1<<width_v_imm)-1,
}; };
static const char* op_string(const Instr &instr) { static const char* op_string(const Instr &instr) {
auto opcode = instr.getOpcode(); auto opcode = instr.getOpcode();
Word func2 = instr.getFunc2(); auto func2 = instr.getFunc2();
Word func3 = instr.getFunc3(); auto func3 = instr.getFunc3();
Word func7 = instr.getFunc7(); auto func7 = instr.getFunc7();
Word rs2 = instr.getRSrc(1); auto rs2 = instr.getRSrc(1);
Word imm = instr.getImm(); auto imm = instr.getImm();
switch (opcode) { switch (opcode) {
case Opcode::NOP: return "NOP"; case Opcode::NOP: return "NOP";
@@ -115,8 +154,10 @@ static const char* op_string(const Instr &instr) {
case 0: return "LBI"; case 0: return "LBI";
case 1: return "LHI"; case 1: return "LHI";
case 2: return "LW"; case 2: return "LW";
case 3: return "LD";
case 4: return "LBU"; case 4: return "LBU";
case 5: return "LHU"; case 5: return "LHU";
case 6: return "LWU";
default: default:
std::abort(); std::abort();
} }
@@ -125,9 +166,38 @@ static const char* op_string(const Instr &instr) {
case 0: return "SB"; case 0: return "SB";
case 1: return "SH"; case 1: return "SH";
case 2: return "SW"; case 2: return "SW";
case 3: return "SD";
default: default:
std::abort(); std::abort();
} }
case Opcode::R_INST_W:
if (func7 & 0x1){
switch (func3) {
case 0: return "MULW";
case 4: return "DIVW";
case 5: return "DIVUW";
case 6: return "REMW";
case 7: return "REMUW";
default:
std::abort();
}
} else {
switch (func3) {
case 0: return func7 ? "SUBW" : "ADDW";
case 1: return "SLLW";
case 5: return func7 ? "SRAW" : "SRLW";
default:
std::abort();
}
}
case Opcode::I_INST_W:
switch (func3) {
case 0: return "ADDIW";
case 1: return "SLLIW";
case 5: return func7 ? "SRAIW" : "SRLIW";
default:
std::abort();
}
case Opcode::SYS_INST: case Opcode::SYS_INST:
switch (func3) { switch (func3) {
case 0: case 0:
@@ -150,49 +220,129 @@ static const char* op_string(const Instr &instr) {
std::abort(); std::abort();
} }
case Opcode::FENCE: return "FENCE"; case Opcode::FENCE: return "FENCE";
case Opcode::FL: return (func3 == 0x2) ? "FL" : "VL"; case Opcode::FL:
case Opcode::FS: return (func3 == 0x2) ? "FS" : "VS"; switch (func3) {
case 0x1: return "VL";
case 0x2: return "FLW";
case 0x3: return "FLD";
default:
std::abort();
}
case Opcode::FS:
switch (func3) {
case 0x1: return "VS";
case 0x2: return "FSW";
case 0x3: return "FSD";
default:
std::abort();
}
case Opcode::FCI: case Opcode::FCI:
switch (func7) { switch (func7) {
case 0x00: return "FADD"; case 0x00: return "FADD.S";
case 0x04: return "FSUB"; case 0x01: return "FADD.D";
case 0x08: return "FMUL"; case 0x04: return "FSUB.S";
case 0x0c: return "FDIV"; case 0x05: return "FSUB.D";
case 0x2c: return "FSQRT"; case 0x08: return "FMUL.S";
case 0x09: return "FMUL.D";
case 0x0c: return "FDIV.S";
case 0x0d: return "FDIV.D";
case 0x2c: return "FSQRT.S";
case 0x2d: return "FSQRT.D";
case 0x10: case 0x10:
switch (func3) { switch (func3) {
case 0: return "FSGNJ"; case 0: return "FSGNJ.S";
case 1: return "FSGNJN"; case 1: return "FSGNJN.S";
case 2: return "FSGNJX"; case 2: return "FSGNJX.S";
default:
std::abort();
}
case 0x11:
switch (func3) {
case 0: return "FSGNJ.D";
case 1: return "FSGNJN.D";
case 2: return "FSGNJX.D";
default: default:
std::abort(); std::abort();
} }
case 0x14: case 0x14:
switch (func3) { switch (func3) {
case 0: return "FMIM"; case 0: return "FMIN.S";
case 1: return "FMAX"; case 1: return "FMAX.S";
default: default:
std::abort(); std::abort();
} }
case 0x15:
switch (func3) {
case 0: return "FMIN.D";
case 1: return "FMAX.D";
default:
std::abort();
}
case 0x20: return "FCVT.S.D";
case 0x21: return "FCVT.D.S";
case 0x50: case 0x50:
switch (func3) { switch (func3) {
case 0: return "FLE"; case 0: return "FLE.S";
case 1: return "FLT"; case 1: return "FLT.S";
case 2: return "FEQ"; case 2: return "FEQ.S";
default: default:
std::abort(); std::abort();
} }
case 0x60: return rs2 ? "FCVT.WU.S" : "FCVT.W.S"; case 0x51:
case 0x68: return rs2 ? "FCVT.S.WU" : "FCVT.S.W"; switch (func3) {
case 0x70: return func3 ? "FLASS" : "FMV.X.W"; case 0: return "FLE.D";
case 1: return "FLT.D";
case 2: return "FEQ.D";
default:
std::abort();
}
case 0x60:
switch (rs2) {
case 0: return "FCVT.W.S";
case 1: return "FCVT.WU.S";
case 2: return "FCVT.L.S";
case 3: return "FCVT.LU.S";
default:
std::abort();
}
case 0x61:
switch (rs2) {
case 0: return "FCVT.W.D";
case 1: return "FCVT.WU.D";
case 2: return "FCVT.L.D";
case 3: return "FCVT.LU.D";
default:
std::abort();
}
case 0x68:
switch (rs2) {
case 0: return "FCVT.S.W";
case 1: return "FCVT.S.WU";
case 2: return "FCVT.S.L";
case 3: return "FCVT.S.LU";
default:
std::abort();
}
case 0x69:
switch (rs2) {
case 0: return "FCVT.D.W";
case 1: return "FCVT.D.WU";
case 2: return "FCVT.D.L";
case 3: return "FCVT.D.LU";
default:
std::abort();
}
case 0x70: return func3 ? "FCLASS.S" : "FMV.X.W";
case 0x71: return func3 ? "FCLASS.D" : "FMV.X.D";
case 0x78: return "FMV.W.X"; case 0x78: return "FMV.W.X";
case 0x79: return "FMV.D.X";
default: default:
std::abort(); std::abort();
} }
case Opcode::FMADD: return "FMADD"; case Opcode::FMADD: return func2 ? "FMADD.D" : "FMADD.S";
case Opcode::FMSUB: return "FMSUB"; case Opcode::FMSUB: return func2 ? "FMSUB.D" : "FMSUB.S";
case Opcode::FMNMADD: return "FMNMADD"; case Opcode::FMNMADD: return func2 ? "FNMADD.D" : "FNMADD.S";
case Opcode::FMNMSUB: return "FMNMSUB"; case Opcode::FMNMSUB: return func2 ? "FNMSUB.D" : "FNMSUB.S";
case Opcode::VSET: return "VSET"; case Opcode::VSET: return "VSET";
case Opcode::GPGPU: case Opcode::GPGPU:
switch (func3) { switch (func3) {
@@ -226,8 +376,8 @@ static const char* op_string(const Instr &instr) {
namespace vortex { namespace vortex {
std::ostream &operator<<(std::ostream &os, const Instr &instr) { std::ostream &operator<<(std::ostream &os, const Instr &instr) {
auto opcode = instr.getOpcode(); auto opcode = instr.getOpcode();
Word func2 = instr.getFunc2(); auto func2 = instr.getFunc2();
Word func3 = instr.getFunc3(); auto func3 = instr.getFunc3();
os << op_string(instr) << ": "; os << op_string(instr) << ": ";
@@ -244,7 +394,7 @@ std::ostream &operator<<(std::ostream &os, const Instr &instr) {
if (instr.getRDType() != RegType::None) { if (instr.getRDType() != RegType::None) {
os << instr.getRDType() << std::dec << instr.getRDest() << " <- "; os << instr.getRDType() << std::dec << instr.getRDest() << " <- ";
} }
int i = 0; uint32_t i = 0;
for (; i < instr.getNRSrc(); ++i) { for (; i < instr.getNRSrc(); ++i) {
if (i) os << ", "; if (i) os << ", ";
os << instr.getRSType(i) << std::dec << instr.getRSrc(i); os << instr.getRSType(i) << std::dec << instr.getRSrc(i);
@@ -261,56 +411,22 @@ std::ostream &operator<<(std::ostream &os, const Instr &instr) {
} }
} }
Decoder::Decoder(const ArchDef &arch) { Decoder::Decoder(const ArchDef&) {}
inst_s_ = arch.wsize() * 8;
opcode_s_ = 7;
reg_s_ = 5;
func2_s_ = 2;
func3_s_ = 3;
mop_s_ = 3;
vmask_s_ = 1;
shift_opcode_ = 0; std::shared_ptr<Instr> Decoder::decode(uint32_t code) const {
shift_rd_ = opcode_s_;
shift_func3_ = shift_rd_ + reg_s_;
shift_rs1_ = shift_func3_ + func3_s_;
shift_rs2_ = shift_rs1_ + reg_s_;
shift_func2_ = shift_rs2_ + reg_s_;
shift_func7_ = shift_rs2_ + reg_s_;
shift_rs3_ = shift_func7_ + func2_s_;
shift_vmop_ = shift_func7_ + vmask_s_;
shift_vnf_ = shift_vmop_ + mop_s_;
shift_func6_ = shift_func7_ + 1;
shift_vset_ = shift_func7_ + 6;
reg_mask_ = 0x1f;
func2_mask_ = 0x3;
func3_mask_ = 0x7;
func6_mask_ = 0x3f;
func7_mask_ = 0x7f;
opcode_mask_ = 0x7f;
i_imm_mask_ = 0xfff;
s_imm_mask_ = 0xfff;
b_imm_mask_ = 0x1fff;
u_imm_mask_ = 0xfffff;
j_imm_mask_ = 0xfffff;
v_imm_mask_ = 0x7ff;
}
std::shared_ptr<Instr> Decoder::decode(Word code) const {
auto instr = std::make_shared<Instr>(); auto instr = std::make_shared<Instr>();
Opcode op = (Opcode)((code >> shift_opcode_) & opcode_mask_); auto op = Opcode((code >> shift_opcode) & mask_opcode);
instr->setOpcode(op); instr->setOpcode(op);
Word func2 = (code >> shift_func2_) & func2_mask_; auto func2 = (code >> shift_func2) & mask_func2;
Word func3 = (code >> shift_func3_) & func3_mask_; auto func3 = (code >> shift_func3) & mask_func3;
Word func6 = (code >> shift_func6_) & func6_mask_; auto func6 = (code >> shift_func6) & mask_func6;
Word func7 = (code >> shift_func7_) & func7_mask_; auto func7 = (code >> shift_func7) & mask_func7;
int rd = (code >> shift_rd_) & reg_mask_; auto rd = (code >> shift_rd) & mask_reg;
int rs1 = (code >> shift_rs1_) & reg_mask_; auto rs1 = (code >> shift_rs1) & mask_reg;
int rs2 = (code >> shift_rs2_) & reg_mask_; auto rs2 = (code >> shift_rs2) & mask_reg;
int rs3 = (code >> shift_rs3_) & reg_mask_; auto rs3 = (code >> shift_rs3) & mask_reg;
auto op_it = sc_instTable.find(op); auto op_it = sc_instTable.find(op);
if (op_it == sc_instTable.end()) { if (op_it == sc_instTable.end()) {
@@ -320,7 +436,7 @@ std::shared_ptr<Instr> Decoder::decode(Word code) const {
auto iType = op_it->second.iType; auto iType = op_it->second.iType;
if (op == Opcode::FL || op == Opcode::FS) { if (op == Opcode::FL || op == Opcode::FS) {
if (func3 != 0x2) { if (func3 != 0x2 && func3 != 0x3) {
iType = InstType::V_TYPE; iType = InstType::V_TYPE;
} }
} }
@@ -330,40 +446,57 @@ std::shared_ptr<Instr> Decoder::decode(Word code) const {
break; break;
case InstType::R_TYPE: case InstType::R_TYPE:
if (op == Opcode::FCI) { if (op == Opcode::FCI) {
switch (func7) { switch (func7) {
case 0x68: // FCVT.S.W, FCVT.S.WU case 0x50: // FLE.S, FLT.S, FEQ.S
case 0x51: // FLE.D, FLT.D, FEQ.D
instr->setDestReg(rd, RegType::Integer);
instr->setSrcReg(rs1, RegType::Float);
instr->setSrcReg(rs2, RegType::Float);
break;
case 0x60: // FCVT.W.D, FCVT.WU.D, FCVT.L.D, FCVT.LU.D
case 0x61: // FCVT.WU.S, FCVT.W.S, FCVT.L.S, FCVT.LU.S
instr->setDestReg(rd, RegType::Integer);
instr->setSrcReg(rs1, RegType::Float);
instr->setSrcReg(rs2, RegType::Integer);
break;
case 0x68: // FCVT.S.W, FCVT.S.WU, FCVT.S.L, FCVT.S.LU
case 0x69: // FCVT.D.W, FCVT.D.WU, FCVT.D.L, FCVT.D.LU
instr->setDestReg(rd, RegType::Float);
instr->setSrcReg(rs1, RegType::Integer);
instr->setSrcReg(rs2, RegType::Integer);
break;
case 0x70: // FCLASS.S, FMV.X.W
case 0x71: // FCLASS.D, FMV.X.D
instr->setDestReg(rd, RegType::Integer);
instr->setSrcReg(rs1, RegType::Float);
break;
case 0x78: // FMV.W.X case 0x78: // FMV.W.X
instr->setSrcReg(rs1); case 0x79: // FMV.D.X
instr->setDestReg(rd, RegType::Float);
instr->setSrcReg(rs1, RegType::Integer);
break; break;
default: default:
instr->setSrcFReg(rs1); instr->setDestReg(rd, RegType::Float);
} instr->setSrcReg(rs1, RegType::Float);
instr->setSrcFReg(rs2); instr->setSrcReg(rs2, RegType::Float);
switch (func7) {
case 0x50: // FLE, FLT, FEQ
case 0x60: // FCVT.WU.S, FCVT.W.S
case 0x70: // FLASS, FMV.X.W
instr->setDestReg(rd);
break; break;
default:
instr->setDestFReg(rd);
} }
} else { } else {
instr->setDestReg(rd); instr->setDestReg(rd, RegType::Integer);
instr->setSrcReg(rs1); instr->setSrcReg(rs1, RegType::Integer);
instr->setSrcReg(rs2); instr->setSrcReg(rs2, RegType::Integer);
} }
instr->setFunc3(func3); instr->setFunc3(func3);
instr->setFunc7(func7); instr->setFunc7(func7);
break; break;
case InstType::I_TYPE: { case InstType::I_TYPE: {
instr->setSrcReg(rs1); instr->setSrcReg(rs1, RegType::Integer);
if (op == Opcode::FL) { if (op == Opcode::FL) {
instr->setDestFReg(rd); instr->setDestReg(rd, RegType::Float);
} else { } else {
instr->setDestReg(rd); instr->setDestReg(rd, RegType::Integer);
} }
instr->setFunc3(func3); instr->setFunc3(func3);
instr->setFunc7(func7); instr->setFunc7(func7);
@@ -371,64 +504,71 @@ std::shared_ptr<Instr> Decoder::decode(Word code) const {
case Opcode::SYS_INST: case Opcode::SYS_INST:
case Opcode::FENCE: case Opcode::FENCE:
// uint12 // uint12
instr->setImm(code >> shift_rs2_); instr->setImm(code >> shift_rs2);
break; break;
case Opcode::I_INST: case Opcode::I_INST:
case Opcode::I_INST_W:
if (func3 == 0x1 || func3 == 0x5) { if (func3 == 0x1 || func3 == 0x5) {
// int5 auto shamt = rs2; // uint5
instr->setImm(sext32(rs2, 5)); #if (XLEN == 64)
if (op == Opcode::I_INST) {
// uint6
shamt |= ((func7 & 0x1) << 5);
}
#endif
instr->setImm(shamt);
} else { } else {
// int12 // int12
instr->setImm(sext32(code >> shift_rs2_, 12)); auto imm = code >> shift_rs2;
instr->setImm(sext(imm, width_i_imm));
} }
break; break;
default: default:
// int12 // int12
instr->setImm(sext32(code >> shift_rs2_, 12)); auto imm = code >> shift_rs2;
instr->setImm(sext(imm, width_i_imm));
break; break;
} }
} break; } break;
case InstType::S_TYPE: { case InstType::S_TYPE: {
instr->setSrcReg(rs1); instr->setSrcReg(rs1, RegType::Integer);
if (op == Opcode::FS) { if (op == Opcode::FS) {
instr->setSrcFReg(rs2); instr->setSrcReg(rs2, RegType::Float);
} else { } else {
instr->setSrcReg(rs2); instr->setSrcReg(rs2, RegType::Integer);
} }
instr->setFunc3(func3); instr->setFunc3(func3);
Word imm = (func7 << reg_s_) | rd; auto imm = (func7 << width_reg) | rd;
instr->setImm(sext32(imm, 12)); instr->setImm(sext(imm, width_i_imm));
} break; } break;
case InstType::B_TYPE: { case InstType::B_TYPE: {
instr->setSrcReg(rs1); instr->setSrcReg(rs1, RegType::Integer);
instr->setSrcReg(rs2); instr->setSrcReg(rs2, RegType::Integer);
instr->setFunc3(func3); instr->setFunc3(func3);
Word bit_11 = rd & 0x1; auto bit_11 = rd & 0x1;
Word bits_4_1 = rd >> 1; auto bits_4_1 = rd >> 1;
Word bit_10_5 = func7 & 0x3f; auto bit_10_5 = func7 & 0x3f;
Word bit_12 = func7 >> 6; auto bit_12 = func7 >> 6;
Word imm = (bits_4_1 << 1) | (bit_10_5 << 5) | (bit_11 << 11) | (bit_12 << 12); auto imm = (bits_4_1 << 1) | (bit_10_5 << 5) | (bit_11 << 11) | (bit_12 << 12);
instr->setImm(sext32(imm, 13)); instr->setImm(sext(imm, width_i_imm+1));
} break; } break;
case InstType::U_TYPE: case InstType::U_TYPE: {
instr->setDestReg(rd); instr->setDestReg(rd, RegType::Integer);
instr->setImm(sext32(code >> shift_func3_, 20)); auto imm = code >> shift_func3;
break; instr->setImm(sext(imm, width_j_imm));
} break;
case InstType::J_TYPE: { case InstType::J_TYPE: {
instr->setDestReg(rd); instr->setDestReg(rd, RegType::Integer);
Word unordered = code >> shift_func3_; auto unordered = code >> shift_func3;
Word bits_19_12 = unordered & 0xff; auto bits_19_12 = unordered & 0xff;
Word bit_11 = (unordered >> 8) & 0x1; auto bit_11 = (unordered >> 8) & 0x1;
Word bits_10_1 = (unordered >> 9) & 0x3ff; auto bits_10_1 = (unordered >> 9) & 0x3ff;
Word bit_20 = (unordered >> 19) & 0x1; auto bit_20 = (unordered >> 19) & 0x1;
Word imm = 0 | (bits_10_1 << 1) | (bit_11 << 11) | (bits_19_12 << 12) | (bit_20 << 20); auto imm = (bits_10_1 << 1) | (bit_11 << 11) | (bits_19_12 << 12) | (bit_20 << 20);
if (bit_20) { instr->setImm(sext(imm, width_j_imm+1));
imm |= ~j_imm_mask_;
}
instr->setImm(imm);
} break; } break;
case InstType::V_TYPE: case InstType::V_TYPE:
@@ -438,9 +578,9 @@ std::shared_ptr<Instr> Decoder::decode(Word code) const {
instr->setSrcVReg(rs1); instr->setSrcVReg(rs1);
instr->setFunc3(func3); instr->setFunc3(func3);
if (func3 == 7) { if (func3 == 7) {
instr->setImm(!(code >> shift_vset_)); instr->setImm(!(code >> shift_vset));
if (instr->getImm()) { if (instr->getImm()) {
Word immed = (code >> shift_rs2_) & v_imm_mask_; auto immed = (code >> shift_rs2) & mask_v_imm;
instr->setImm(immed); instr->setImm(immed);
instr->setVlmul(immed & 0x3); instr->setVlmul(immed & 0x3);
instr->setVediv((immed >> 4) & 0x3); instr->setVediv((immed >> 4) & 0x3);
@@ -450,7 +590,7 @@ std::shared_ptr<Instr> Decoder::decode(Word code) const {
} }
} else { } else {
instr->setSrcVReg(rs2); instr->setSrcVReg(rs2);
instr->setVmask((code >> shift_func7_) & 0x1); instr->setVmask((code >> shift_func7) & 0x1);
instr->setFunc6(func6); instr->setFunc6(func6);
} }
} break; } break;
@@ -460,9 +600,9 @@ std::shared_ptr<Instr> Decoder::decode(Word code) const {
instr->setSrcVReg(rs1); instr->setSrcVReg(rs1);
instr->setVlsWidth(func3); instr->setVlsWidth(func3);
instr->setSrcVReg(rs2); instr->setSrcVReg(rs2);
instr->setVmask(code >> shift_func7_); instr->setVmask(code >> shift_func7);
instr->setVmop((code >> shift_vmop_) & func3_mask_); instr->setVmop((code >> shift_vmop) & mask_func3);
instr->setVnf((code >> shift_vnf_) & func3_mask_); instr->setVnf((code >> shift_vnf) & mask_func3);
break; break;
case Opcode::FS: case Opcode::FS:
@@ -470,9 +610,9 @@ std::shared_ptr<Instr> Decoder::decode(Word code) const {
instr->setSrcVReg(rs1); instr->setSrcVReg(rs1);
instr->setVlsWidth(func3); instr->setVlsWidth(func3);
instr->setSrcVReg(rs2); instr->setSrcVReg(rs2);
instr->setVmask(code >> shift_func7_); instr->setVmask(code >> shift_func7);
instr->setVmop((code >> shift_vmop_) & func3_mask_); instr->setVmop((code >> shift_vmop) & mask_func3);
instr->setVnf((code >> shift_vnf_) & func3_mask_); instr->setVnf((code >> shift_vnf) & mask_func3);
break; break;
default: default:
@@ -481,15 +621,15 @@ std::shared_ptr<Instr> Decoder::decode(Word code) const {
break; break;
case R4_TYPE: case R4_TYPE:
if (op == Opcode::GPU) { if (op == Opcode::GPU) {
instr->setDestReg(rd); instr->setDestReg(rd, RegType::Integer);
instr->setSrcReg(rs1); instr->setSrcReg(rs1, RegType::Integer);
instr->setSrcReg(rs2); instr->setSrcReg(rs2, RegType::Integer);
instr->setSrcReg(rs3); instr->setSrcReg(rs3, RegType::Integer);
} else { } else {
instr->setDestFReg(rd); instr->setDestReg(rd, RegType::Float);
instr->setSrcFReg(rs1); instr->setSrcReg(rs1, RegType::Float);
instr->setSrcFReg(rs2); instr->setSrcReg(rs2, RegType::Float);
instr->setSrcFReg(rs3); instr->setSrcReg(rs3, RegType::Float);
} }
instr->setFunc2(func2); instr->setFunc2(func2);
instr->setFunc3(func3); instr->setFunc3(func3);

View File

@@ -7,55 +7,12 @@ namespace vortex {
class ArchDef; class ArchDef;
class Instr; class Instr;
class Pipeline;
class Decoder { class Decoder {
public: public:
Decoder(const ArchDef &); Decoder(const ArchDef &);
std::shared_ptr<Instr> decode(Word code) const; std::shared_ptr<Instr> decode(uint32_t code) const;
private:
Word inst_s_;
Word opcode_s_;
Word reg_s_;
Word func2_s_;
Word func3_s_;
Word shift_opcode_;
Word shift_rd_;
Word shift_rs1_;
Word shift_rs2_;
Word shift_rs3_;
Word shift_func2_;
Word shift_func3_;
Word shift_func7_;
Word shift_j_u_immed_;
Word shift_s_b_immed_;
Word shift_i_immed_;
Word reg_mask_;
Word func2_mask_;
Word func3_mask_;
Word func6_mask_;
Word func7_mask_;
Word opcode_mask_;
Word i_imm_mask_;
Word s_imm_mask_;
Word b_imm_mask_;
Word u_imm_mask_;
Word j_imm_mask_;
Word v_imm_mask_;
//Vector
Word shift_vset_;
Word shift_vset_immed_;
Word shift_vmask_;
Word shift_vmop_;
Word shift_vnf_;
Word shift_func6_;
Word vmask_s_;
Word mop_s_;
}; };
} }

File diff suppressed because it is too large Load Diff

View File

@@ -114,8 +114,8 @@ void LsuUnit::tick() {
// duplicates detection // duplicates detection
bool is_dup = false; bool is_dup = false;
if (trace->tmask.test(0)) { if (trace->tmask.test(0)) {
uint64_t addr_mask = sizeof(Word)-1; uint64_t addr_mask = sizeof(uint32_t)-1;
Word addr0 = trace->mem_addrs.at(0).at(0).addr & ~addr_mask; uint32_t addr0 = trace->mem_addrs.at(0).at(0).addr & ~addr_mask;
uint32_t matches = 1; uint32_t matches = 1;
for (uint32_t t = 1; t < num_threads_; ++t) { for (uint32_t t = 1; t < num_threads_; ++t) {
if (!trace->tmask.test(t)) if (!trace->tmask.test(t))

View File

@@ -32,6 +32,9 @@ enum Opcode {
// GPGPU Extension // GPGPU Extension
GPGPU = 0x6b, GPGPU = 0x6b,
GPU = 0x5b, GPU = 0x5b,
// RV64 Standard Extensions
R_INST_W = 0x3b,
I_INST_W = 0x1b,
}; };
enum InstType { enum InstType {
@@ -54,56 +57,54 @@ public:
, has_imm_(false) , has_imm_(false)
, rdest_type_(RegType::None) , rdest_type_(RegType::None)
, rdest_(0) , rdest_(0)
, func2_(0)
, func3_(0) , func3_(0)
, func6_(0)
, func7_(0) { , func7_(0) {
for (int i = 0; i < MAX_REG_SOURCES; ++i) { for (uint32_t i = 0; i < MAX_REG_SOURCES; ++i) {
rsrc_type_[i] = RegType::None; rsrc_type_[i] = RegType::None;
} }
} }
/* Setters used to "craft" the instruction. */
void setOpcode(Opcode opcode) { opcode_ = opcode; } void setOpcode(Opcode opcode) { opcode_ = opcode; }
void setDestReg(int destReg) { rdest_type_ = RegType::Integer; rdest_ = destReg; } void setDestReg(uint32_t destReg, RegType type) { rdest_type_ = type; rdest_ = destReg; }
void setSrcReg(int srcReg) { rsrc_type_[num_rsrcs_] = RegType::Integer; rsrc_[num_rsrcs_++] = srcReg; } void setSrcReg(uint32_t srcReg, RegType type) { rsrc_type_[num_rsrcs_] = type; rsrc_[num_rsrcs_++] = srcReg; }
void setDestFReg(int destReg) { rdest_type_ = RegType::Float; rdest_ = destReg; } void setDestVReg(uint32_t destReg) { rdest_type_ = RegType::Vector; rdest_ = destReg; }
void setSrcFReg(int srcReg) { rsrc_type_[num_rsrcs_] = RegType::Float; rsrc_[num_rsrcs_++] = srcReg; } void setSrcVReg(uint32_t srcReg) { rsrc_type_[num_rsrcs_] = RegType::Vector; rsrc_[num_rsrcs_++] = srcReg; }
void setDestVReg(int destReg) { rdest_type_ = RegType::Vector; rdest_ = destReg; } void setFunc2(uint32_t func2) { func2_ = func2; }
void setSrcVReg(int srcReg) { rsrc_type_[num_rsrcs_] = RegType::Vector; rsrc_[num_rsrcs_++] = srcReg; } void setFunc3(uint32_t func3) { func3_ = func3; }
void setFunc2(Word func2) { func2_ = func2; } void setFunc7(uint32_t func7) { func7_ = func7; }
void setFunc3(Word func3) { func3_ = func3; } void setImm(uint32_t imm) { has_imm_ = true; imm_ = imm; }
void setFunc7(Word func7) { func7_ = func7; } void setVlsWidth(uint32_t width) { vlsWidth_ = width; }
void setImm(Word imm) { has_imm_ = true; imm_ = imm; } void setVmop(uint32_t mop) { vMop_ = mop; }
void setVlsWidth(Word width) { vlsWidth_ = width; } void setVnf(uint32_t nf) { vNf_ = nf; }
void setVmop(Word mop) { vMop_ = mop; } void setVmask(uint32_t mask) { vmask_ = mask; }
void setVnf(Word nf) { vNf_ = nf; } void setVs3(uint32_t vs) { vs3_ = vs; }
void setVmask(Word mask) { vmask_ = mask; } void setVlmul(uint32_t lmul) { vlmul_ = 1 << lmul; }
void setVs3(Word vs) { vs3_ = vs; } void setVsew(uint32_t sew) { vsew_ = 1 << (3+sew); }
void setVlmul(Word lmul) { vlmul_ = 1 << lmul; } void setVediv(uint32_t ediv) { vediv_ = 1 << ediv; }
void setVsew(Word sew) { vsew_ = 1 << (3+sew); } void setFunc6(uint32_t func6) { func6_ = func6; }
void setVediv(Word ediv) { vediv_ = 1 << ediv; }
void setFunc6(Word func6) { func6_ = func6; }
/* Getters used by encoders. */
Opcode getOpcode() const { return opcode_; } Opcode getOpcode() const { return opcode_; }
Word getFunc2() const { return func2_; } uint32_t getFunc2() const { return func2_; }
Word getFunc3() const { return func3_; } uint32_t getFunc3() const { return func3_; }
Word getFunc6() const { return func6_; } uint32_t getFunc6() const { return func6_; }
Word getFunc7() const { return func7_; } uint32_t getFunc7() const { return func7_; }
int getNRSrc() const { return num_rsrcs_; } uint32_t getNRSrc() const { return num_rsrcs_; }
int getRSrc(int i) const { return rsrc_[i]; } uint32_t getRSrc(uint32_t i) const { return rsrc_[i]; }
RegType getRSType(int i) const { return rsrc_type_[i]; } RegType getRSType(uint32_t i) const { return rsrc_type_[i]; }
int getRDest() const { return rdest_; } uint32_t getRDest() const { return rdest_; }
RegType getRDType() const { return rdest_type_; } RegType getRDType() const { return rdest_type_; }
bool hasImm() const { return has_imm_; } bool hasImm() const { return has_imm_; }
Word getImm() const { return imm_; } uint32_t getImm() const { return imm_; }
Word getVlsWidth() const { return vlsWidth_; } uint32_t getVlsWidth() const { return vlsWidth_; }
Word getVmop() const { return vMop_; } uint32_t getVmop() const { return vMop_; }
Word getvNf() const { return vNf_; } uint32_t getvNf() const { return vNf_; }
Word getVmask() const { return vmask_; } uint32_t getVmask() const { return vmask_; }
Word getVs3() const { return vs3_; } uint32_t getVs3() const { return vs3_; }
Word getVlmul() const { return vlmul_; } uint32_t getVlmul() const { return vlmul_; }
Word getVsew() const { return vsew_; } uint32_t getVsew() const { return vsew_; }
Word getVediv() const { return vediv_; } uint32_t getVediv() const { return vediv_; }
private: private:
@@ -112,27 +113,27 @@ private:
}; };
Opcode opcode_; Opcode opcode_;
int num_rsrcs_; uint32_t num_rsrcs_;
bool has_imm_; bool has_imm_;
RegType rdest_type_; RegType rdest_type_;
Word imm_; uint32_t imm_;
RegType rsrc_type_[MAX_REG_SOURCES]; RegType rsrc_type_[MAX_REG_SOURCES];
int rsrc_[MAX_REG_SOURCES]; uint32_t rsrc_[MAX_REG_SOURCES];
int rdest_; uint32_t rdest_;
Word func2_; uint32_t func2_;
Word func3_; uint32_t func3_;
Word func6_; uint32_t func6_;
uint32_t func7_;
// Vector // Vector
Word vmask_; uint32_t vmask_;
Word vlsWidth_; uint32_t vlsWidth_;
Word vMop_; uint32_t vMop_;
Word vNf_; uint32_t vNf_;
Word vs3_; uint32_t vs3_;
Word vlmul_; uint32_t vlmul_;
Word vsew_; uint32_t vsew_;
Word vediv_; uint32_t vediv_;
Word func7_;
friend std::ostream &operator<<(std::ostream &, const Instr&); friend std::ostream &operator<<(std::ostream &, const Instr&);
}; };

View File

@@ -11,13 +11,13 @@
#include "constants.h" #include "constants.h"
#include <util.h> #include <util.h>
#include "args.h" #include "args.h"
#include "core.h"
using namespace vortex; using namespace vortex;
int main(int argc, char **argv) { int main(int argc, char **argv) {
int exitcode = 0; int exitcode = 0;
std::string archStr("rv32imf");
std::string imgFileName; std::string imgFileName;
int num_cores(NUM_CORES * NUM_CLUSTERS); int num_cores(NUM_CORES * NUM_CLUSTERS);
int num_warps(NUM_WARPS); int num_warps(NUM_WARPS);
@@ -26,15 +26,14 @@ int main(int argc, char **argv) {
bool showStats(false); bool showStats(false);
bool riscv_test(false); bool riscv_test(false);
/* Read the command line arguments. */ // parse the command line arguments
CommandLineArgFlag fh("-h", "--help", "", showHelp); CommandLineArgFlag fh("-h", "--help", "show command line options", showHelp);
CommandLineArgSetter<std::string> fa("-a", "--arch", "", archStr); CommandLineArgSetter<std::string> fi("-i", "--image", "program binary", imgFileName);
CommandLineArgSetter<std::string> fi("-i", "--image", "", imgFileName); CommandLineArgSetter<int> fc("-c", "--cores", "number of cores", num_cores);
CommandLineArgSetter<int> fc("-c", "--cores", "", num_cores); CommandLineArgSetter<int> fw("-w", "--warps", "number of warps", num_warps);
CommandLineArgSetter<int> fw("-w", "--warps", "", num_warps); CommandLineArgSetter<int> ft("-t", "--threads", "number of threads", num_threads);
CommandLineArgSetter<int> ft("-t", "--threads", "", num_threads); CommandLineArgFlag fr("-r", "--riscv", "enable riscv tests", riscv_test);
CommandLineArgFlag fr("-r", "--riscv", "", riscv_test); CommandLineArgFlag fs("-s", "--stats", "show stats", showStats);
CommandLineArgFlag fs("-s", "--stats", "", showStats);
CommandLineArg::readArgs(argc - 1, argv + 1); CommandLineArg::readArgs(argc - 1, argv + 1);
@@ -44,7 +43,6 @@ int main(int argc, char **argv) {
" -c, --cores <num> Number of cores\n" " -c, --cores <num> Number of cores\n"
" -w, --warps <num> Number of warps\n" " -w, --warps <num> Number of warps\n"
" -t, --threads <num> Number of threads\n" " -t, --threads <num> Number of threads\n"
" -a, --arch <arch string> Architecture string\n"
" -r, --riscv riscv test\n" " -r, --riscv riscv test\n"
" -s, --stats Print stats on exit.\n"; " -s, --stats Print stats on exit.\n";
return 0; return 0;
@@ -54,7 +52,7 @@ int main(int argc, char **argv) {
{ {
// create processor configuation // create processor configuation
ArchDef arch(archStr, num_cores, num_warps, num_threads); ArchDef arch(num_cores, num_warps, num_threads);
// create memory module // create memory module
RAM ram(RAM_PAGE_SIZE); RAM ram(RAM_PAGE_SIZE);
@@ -79,7 +77,8 @@ int main(int argc, char **argv) {
processor.attach_ram(&ram); processor.attach_ram(&ram);
// run simulation // run simulation
processor.run(); exitcode = processor.run();
} }
if (riscv_test) { if (riscv_test) {

View File

@@ -15,8 +15,8 @@ struct pipeline_trace_t {
uint64_t uuid; uint64_t uuid;
//-- //--
int cid; uint32_t cid;
int wid; uint32_t wid;
ThreadMask tmask; ThreadMask tmask;
Word PC; Word PC;
@@ -26,7 +26,7 @@ struct pipeline_trace_t {
//-- //--
bool wb; bool wb;
RegType rdest_type; RegType rdest_type;
int rdest; uint32_t rdest;
//-- //--
RegMask used_iregs; RegMask used_iregs;

View File

@@ -28,7 +28,7 @@ public:
} }
void clear() { void clear() {
for (int i = 0, n = in_use_iregs_.size(); i < n; ++i) { for (uint32_t i = 0, n = in_use_iregs_.size(); i < n; ++i) {
in_use_iregs_.at(i).reset(); in_use_iregs_.at(i).reset();
in_use_fregs_.at(i).reset(); in_use_fregs_.at(i).reset();
in_use_vregs_.at(i).reset(); in_use_vregs_.at(i).reset();

View File

@@ -61,10 +61,11 @@ uint32_t TexUnit::read(int32_t u,
uint32_t addr11 = base_addr + offset11 * stride; uint32_t addr11 = base_addr + offset11 * stride;
// memory lookup // memory lookup
uint32_t texel00 = core_->dcache_read(addr00, stride); uint32_t texel00(0), texel01(0), texel10(0), texel11(0);
uint32_t texel01 = core_->dcache_read(addr01, stride); core_->dcache_read(&texel00, addr00, stride);
uint32_t texel10 = core_->dcache_read(addr10, stride); core_->dcache_read(&texel01, addr01, stride);
uint32_t texel11 = core_->dcache_read(addr11, stride); core_->dcache_read(&texel10, addr10, stride);
core_->dcache_read(&texel11, addr11, stride);
mem_addrs->push_back({addr00, stride}); mem_addrs->push_back({addr00, stride});
mem_addrs->push_back({addr01, stride}); mem_addrs->push_back({addr01, stride});
@@ -84,7 +85,8 @@ uint32_t TexUnit::read(int32_t u,
uint32_t addr = base_addr + offset * stride; uint32_t addr = base_addr + offset * stride;
// memory lookup // memory lookup
uint32_t texel = core_->dcache_read(addr, stride); uint32_t texel(0);
core_->dcache_read(&texel, addr, stride);
mem_addrs->push_back({addr, stride}); mem_addrs->push_back({addr, stride});
// filtering // filtering

View File

@@ -10,12 +10,22 @@
namespace vortex { namespace vortex {
typedef uint8_t Byte; typedef uint8_t Byte;
#if XLEN == 32
typedef uint32_t Word; typedef uint32_t Word;
typedef int32_t WordI; typedef int32_t WordI;
typedef uint64_t DWord;
typedef int64_t DWordI;
#elif XLEN == 64
typedef uint64_t Word;
typedef int64_t WordI;
typedef __uint128_t DWord;
typedef __int128_t DWordI;
#else
#error unsupported XLEN
#endif
typedef uint32_t Addr; typedef uint64_t FWord;
typedef uint32_t Size;
typedef std::bitset<32> RegMask; typedef std::bitset<32> RegMask;
typedef std::bitset<32> ThreadMask; typedef std::bitset<32> ThreadMask;
@@ -30,12 +40,12 @@ enum class RegType {
Vector Vector
}; };
inline std::ostream &operator<<(std::ostream &os, const RegType& type) { inline std::ostream &operator<<(std::ostream &os, const RegType& clss) {
switch (type) { switch (clss) {
case RegType::None: break; case RegType::None: break;
case RegType::Integer: os << "r"; break; case RegType::Integer: os << "x"; break;
case RegType::Float: os << "fr"; break; case RegType::Float: os << "f"; break;
case RegType::Vector: os << "vr"; break; case RegType::Vector: os << "v"; break;
} }
return os; return os;
} }
@@ -232,7 +242,7 @@ struct MemReq {
inline std::ostream &operator<<(std::ostream &os, const MemReq& req) { inline std::ostream &operator<<(std::ostream &os, const MemReq& req) {
os << "mem-" << (req.write ? "wr" : "rd") << ": "; os << "mem-" << (req.write ? "wr" : "rd") << ": ";
os << "addr=" << req.addr << ", tag=" << req.tag << ", core_id=" << req.core_id; os << "addr=" << std::hex << req.addr << std::dec << ", tag=" << req.tag << ", core_id=" << req.core_id;
os << " (#" << std::dec << req.uuid << ")"; os << " (#" << std::dec << req.uuid << ")";
return os; return os;
} }

View File

@@ -10,11 +10,11 @@
using namespace vortex; using namespace vortex;
Warp::Warp(Core *core, Word id) Warp::Warp(Core *core, uint32_t id)
: id_(id) : id_(id)
, core_(core) , core_(core)
, ireg_file_(core->arch().num_threads(), std::vector<Word>(core->arch().num_regs())) , ireg_file_(core->arch().num_threads(), std::vector<Word>(core->arch().num_regs()))
, freg_file_(core->arch().num_threads(), std::vector<Word>(core->arch().num_regs())) , freg_file_(core->arch().num_threads(), std::vector<FWord>(core->arch().num_regs()))
, vreg_file_(core->arch().num_threads(), std::vector<Byte>(core->arch().vsize())) , vreg_file_(core->arch().num_threads(), std::vector<Byte>(core->arch().vsize()))
{ {
this->clear(); this->clear();
@@ -24,7 +24,7 @@ void Warp::clear() {
active_ = false; active_ = false;
PC_ = STARTUP_ADDR; PC_ = STARTUP_ADDR;
tmask_.reset(); tmask_.reset();
for (int i = 0, n = core_->arch().num_threads(); i < n; ++i) { for (uint32_t i = 0, n = core_->arch().num_threads(); i < n; ++i) {
for (auto& reg : ireg_file_.at(i)) { for (auto& reg : ireg_file_.at(i)) {
reg = 0; reg = 0;
} }
@@ -41,13 +41,14 @@ void Warp::eval(pipeline_trace_t *trace) {
assert(tmask_.any()); assert(tmask_.any());
DPH(2, "Fetch: coreid=" << core_->id() << ", wid=" << id_ << ", tmask="); DPH(2, "Fetch: coreid=" << core_->id() << ", wid=" << id_ << ", tmask=");
for (int i = 0, n = core_->arch().num_threads(); i < n; ++i) for (uint32_t i = 0, n = core_->arch().num_threads(); i < n; ++i)
DPN(2, tmask_.test(n-i-1)); DPN(2, tmask_.test(n-i-1));
DPN(2, ", PC=0x" << std::hex << PC_ << " (#" << std::dec << trace->uuid << ")" << std::endl); DPN(2, ", PC=0x" << std::hex << PC_ << " (#" << std::dec << trace->uuid << ")" << std::endl);
/* Fetch and decode. */ /* Fetch and decode. */
Word instr_code = core_->icache_read(PC_, sizeof(Word)); uint32_t instr_code = 0;
core_->icache_read(&instr_code, PC_, sizeof(uint32_t));
auto instr = core_->decoder().decode(instr_code); auto instr = core_->decoder().decode(instr_code);
if (!instr) { if (!instr) {
std::cout << std::hex << "Error: invalid instruction 0x" << instr_code << ", at PC=" << PC_ << std::endl; std::cout << std::hex << "Error: invalid instruction 0x" << instr_code << ", at PC=" << PC_ << std::endl;
@@ -68,10 +69,16 @@ void Warp::eval(pipeline_trace_t *trace) {
this->execute(*instr, trace); this->execute(*instr, trace);
DP(4, "Register state:"); DP(4, "Register state:");
for (int i = 0; i < core_->arch().num_regs(); ++i) { for (uint32_t i = 0; i < core_->arch().num_regs(); ++i) {
DPN(4, " %r" << std::setfill('0') << std::setw(2) << std::dec << i << ':'); DPN(4, " %r" << std::setfill('0') << std::setw(2) << std::dec << i << ':');
for (int j = 0; j < core_->arch().num_threads(); ++j) { // Integer register file
DPN(4, ' ' << std::setfill('0') << std::setw(8) << std::hex << ireg_file_.at(j).at(i) << std::setfill(' ') << ' '); for (uint32_t j = 0; j < core_->arch().num_threads(); ++j) {
DPN(4, ' ' << std::setfill('0') << std::setw(XLEN/4) << std::hex << ireg_file_.at(j).at(i) << std::setfill(' ') << ' ');
}
DPN(4, '|');
// Floating point register file
for (uint32_t j = 0; j < core_->arch().num_threads(); ++j) {
DPN(4, ' ' << std::setfill('0') << std::setw(16) << std::hex << freg_file_.at(j).at(i) << std::setfill(' ') << ' ');
} }
DPN(4, std::endl); DPN(4, std::endl);
} }

View File

@@ -32,15 +32,15 @@ struct DomStackEntry {
}; };
struct vtype { struct vtype {
int vill; uint32_t vill;
int vediv; uint32_t vediv;
int vsew; uint32_t vsew;
int vlmul; uint32_t vlmul;
}; };
class Warp { class Warp {
public: public:
Warp(Core *core, Word id); Warp(Core *core, uint32_t id);
void clear(); void clear();
@@ -62,15 +62,15 @@ public:
return 0; return 0;
} }
Word id() const { uint32_t id() const {
return id_; return id_;
} }
Word getPC() const { uint32_t getPC() const {
return PC_; return PC_;
} }
void setPC(Word PC) { void setPC(uint32_t PC) {
PC_ = PC; PC_ = PC;
} }
@@ -79,13 +79,13 @@ public:
active_ = tmask_.any(); active_ = tmask_.any();
} }
Word getTmask() const { uint32_t getTmask() const {
if (active_) if (active_)
return tmask_.to_ulong(); return tmask_.to_ulong();
return 0; return 0;
} }
Word getIRegValue(int reg) const { uint32_t getIRegValue(uint32_t reg) const {
return ireg_file_.at(0).at(reg); return ireg_file_.at(0).at(reg);
} }
@@ -95,7 +95,7 @@ private:
void execute(const Instr &instr, pipeline_trace_t *trace); void execute(const Instr &instr, pipeline_trace_t *trace);
Word id_; uint32_t id_;
Core *core_; Core *core_;
bool active_; bool active_;
@@ -103,12 +103,12 @@ private:
ThreadMask tmask_; ThreadMask tmask_;
std::vector<std::vector<Word>> ireg_file_; std::vector<std::vector<Word>> ireg_file_;
std::vector<std::vector<Word>> freg_file_; std::vector<std::vector<FWord>> freg_file_;
std::vector<std::vector<Byte>> vreg_file_; std::vector<std::vector<Byte>> vreg_file_;
std::stack<DomStackEntry> dom_stack_; std::stack<DomStackEntry> dom_stack_;
struct vtype vtype_; struct vtype vtype_;
int vl_; uint32_t vl_;
}; };
} }

View File

@@ -1,3 +1,5 @@
XLEN ?= 32
RISCV_TOOLCHAIN_PATH ?= $(wildcard ../../../../riscv-gnu-toolchain/drops) RISCV_TOOLCHAIN_PATH ?= $(wildcard ../../../../riscv-gnu-toolchain/drops)
POCL_CC_PATH ?= $(wildcard ../../../../pocl/drops_riscv_cc) POCL_CC_PATH ?= $(wildcard ../../../../pocl/drops_riscv_cc)
POCL_INC_PATH ?= $(wildcard ../include) POCL_INC_PATH ?= $(wildcard ../include)
@@ -19,7 +21,7 @@ VX_SRCS += $(VORTEX_RT_PATH)/fileio/fileio.S
VX_SRCS += $(VORTEX_RT_PATH)/tests/tests.c VX_SRCS += $(VORTEX_RT_PATH)/tests/tests.c
VX_SRCS += $(VORTEX_RT_PATH)/vx_api/vx_api.c VX_SRCS += $(VORTEX_RT_PATH)/vx_api/vx_api.c
VX_CFLAGS = -nostartfiles -Wl,-Bstatic,-T,$(VORTEX_RT_PATH)/startup/vx_link.ld VX_CFLAGS = -nostartfiles -Wl,-Bstatic,-T,$(VORTEX_RT_PATH)/startup/vx_link$(XLEN).ld
CXXFLAGS = -g -O0 -march=rv32im -mabi=ilp32 CXXFLAGS = -g -O0 -march=rv32im -mabi=ilp32
CXXFLAGS += -ffreestanding # program may not begin at main() CXXFLAGS += -ffreestanding # program may not begin at main()
@@ -50,7 +52,7 @@ $(PROJECT).dump: $(PROJECT).elf
$(DMP) -D $(PROJECT).elf > $(PROJECT).dump $(DMP) -D $(PROJECT).elf > $(PROJECT).dump
run: $(PROJECT).hex run: $(PROJECT).hex
POCL_DEBUG=all $(VX_SIMX_PATH)/Vcache_simX -E -a rv32i --core $(PROJECT).hex -s -b 1> emulator.debug POCL_DEBUG=all $(VX_SIMX_PATH)/Vcache_simX -E --core $(PROJECT).hex -s -b 1> emulator.debug
qemu: $(PROJECT).qemu qemu: $(PROJECT).qemu
POCL_DEBUG=all $(RISCV_TOOLCHAIN_PATH)/bin/qemu-riscv32 -d in_asm -D debug.log $(PROJECT).qemu POCL_DEBUG=all $(RISCV_TOOLCHAIN_PATH)/bin/qemu-riscv32 -d in_asm -D debug.log $(PROJECT).qemu

View File

@@ -1,3 +1,5 @@
XLEN ?= 32
RISCV_TOOLCHAIN_PATH ?= $(wildcard ../../../../riscv-gnu-toolchain/drops) RISCV_TOOLCHAIN_PATH ?= $(wildcard ../../../../riscv-gnu-toolchain/drops)
POCL_CC_PATH ?= $(wildcard ../../../../pocl/drops_riscv_cc) POCL_CC_PATH ?= $(wildcard ../../../../pocl/drops_riscv_cc)
POCL_INC_PATH ?= $(wildcard ../include) POCL_INC_PATH ?= $(wildcard ../include)
@@ -19,7 +21,7 @@ VX_SRCS += $(VORTEX_RT_PATH)/fileio/fileio.S
VX_SRCS += $(VORTEX_RT_PATH)/tests/tests.c VX_SRCS += $(VORTEX_RT_PATH)/tests/tests.c
VX_SRCS += $(VORTEX_RT_PATH)/vx_api/vx_api.c VX_SRCS += $(VORTEX_RT_PATH)/vx_api/vx_api.c
VX_CFLAGS = -nostartfiles -Wl,-Bstatic,-T,$(VORTEX_RT_PATH)/startup/vx_link.ld VX_CFLAGS = -nostartfiles -Wl,-Bstatic,-T,$(VORTEX_RT_PATH)/startup/vx_link$(XLEN).ld
CXXFLAGS = -g -O0 -march=rv32im -mabi=ilp32 CXXFLAGS = -g -O0 -march=rv32im -mabi=ilp32
CXXFLAGS += -ffreestanding # program may not begin at main() CXXFLAGS += -ffreestanding # program may not begin at main()
@@ -50,7 +52,7 @@ $(PROJECT).dump: $(PROJECT).elf
$(DMP) -D $(PROJECT).elf > $(PROJECT).dump $(DMP) -D $(PROJECT).elf > $(PROJECT).dump
run: $(PROJECT).hex run: $(PROJECT).hex
POCL_DEBUG=all $(VX_SIMX_PATH)/Vcache_simX -E -a rv32i --core $(PROJECT).hex -s -b 1> emulator.debug POCL_DEBUG=all $(VX_SIMX_PATH)/Vcache_simX -E $(PROJECT).hex -s -b 1> emulator.debug
qemu: $(PROJECT).qemu qemu: $(PROJECT).qemu
POCL_DEBUG=all $(RISCV_TOOLCHAIN_PATH)/bin/qemu-riscv32 -d in_asm -D debug.log $(PROJECT).qemu POCL_DEBUG=all $(RISCV_TOOLCHAIN_PATH)/bin/qemu-riscv32 -d in_asm -D debug.log $(PROJECT).qemu

View File

@@ -1,3 +1,5 @@
XLEN ?= 32
RISCV_TOOLCHAIN_PATH ?= $(wildcard ../../../../riscv-gnu-toolchain/drops) RISCV_TOOLCHAIN_PATH ?= $(wildcard ../../../../riscv-gnu-toolchain/drops)
POCL_CC_PATH ?= $(wildcard ../../../../pocl/drops_riscv_cc) POCL_CC_PATH ?= $(wildcard ../../../../pocl/drops_riscv_cc)
POCL_INC_PATH ?= $(wildcard ../include) POCL_INC_PATH ?= $(wildcard ../include)
@@ -19,7 +21,7 @@ VX_SRCS += $(VORTEX_RT_PATH)/fileio/fileio.S
VX_SRCS += $(VORTEX_RT_PATH)/tests/tests.c VX_SRCS += $(VORTEX_RT_PATH)/tests/tests.c
VX_SRCS += $(VORTEX_RT_PATH)/vx_api/vx_api.c VX_SRCS += $(VORTEX_RT_PATH)/vx_api/vx_api.c
VX_CFLAGS = -nostartfiles -Wl,-Bstatic,-T,$(VORTEX_RT_PATH)/startup/vx_link.ld VX_CFLAGS = -nostartfiles -Wl,-Bstatic,-T,$(VORTEX_RT_PATH)/startup/vx_link$(XLEN).ld
CXXFLAGS = -g -O0 -march=rv32im -mabi=ilp32 CXXFLAGS = -g -O0 -march=rv32im -mabi=ilp32
CXXFLAGS += -ffreestanding # program may not begin at main() CXXFLAGS += -ffreestanding # program may not begin at main()
@@ -50,7 +52,7 @@ $(PROJECT).dump: $(PROJECT).elf
$(DMP) -D $(PROJECT).elf > $(PROJECT).dump $(DMP) -D $(PROJECT).elf > $(PROJECT).dump
run: $(PROJECT).hex run: $(PROJECT).hex
POCL_DEBUG=all $(VX_SIMX_PATH)/Vcache_simX -E -a rv32i --core $(PROJECT).hex -s -b 1> emulator.debug POCL_DEBUG=all $(VX_SIMX_PATH)/Vcache_simX -E $(PROJECT).hex -s -b 1> emulator.debug
qemu: $(PROJECT).qemu qemu: $(PROJECT).qemu
POCL_DEBUG=all $(RISCV_TOOLCHAIN_PATH)/bin/qemu-riscv32 -d in_asm -D debug.log $(PROJECT).qemu POCL_DEBUG=all $(RISCV_TOOLCHAIN_PATH)/bin/qemu-riscv32 -d in_asm -D debug.log $(PROJECT).qemu

View File

@@ -1,3 +1,5 @@
XLEN ?= 32
LLVM_PREFIX ?= /opt/llvm-riscv LLVM_PREFIX ?= /opt/llvm-riscv
RISCV_TOOLCHAIN_PATH ?= /opt/riscv-gnu-toolchain RISCV_TOOLCHAIN_PATH ?= /opt/riscv-gnu-toolchain
SYSROOT ?= $(RISCV_TOOLCHAIN_PATH)/riscv32-unknown-elf SYSROOT ?= $(RISCV_TOOLCHAIN_PATH)/riscv32-unknown-elf
@@ -9,7 +11,7 @@ VORTEX_RT_PATH ?= $(realpath ../../../runtime)
K_LLCFLAGS += "-O3 -march=riscv32 -target-abi=ilp32f -mcpu=generic-rv32 -mattr=+m,+f -mattr=+vortex -float-abi=hard -code-model=small" K_LLCFLAGS += "-O3 -march=riscv32 -target-abi=ilp32f -mcpu=generic-rv32 -mattr=+m,+f -mattr=+vortex -float-abi=hard -code-model=small"
K_CFLAGS += "-v -O3 -Wstack-usage=1024 --sysroot=$(SYSROOT) --gcc-toolchain=$(RISCV_TOOLCHAIN_PATH) -march=rv32imf -mabi=ilp32f -Xclang -target-feature -Xclang +vortex -I$(VORTEX_RT_PATH)/include -fno-rtti -fno-exceptions -ffreestanding -nostartfiles -fdata-sections -ffunction-sections" K_CFLAGS += "-v -O3 -Wstack-usage=1024 --sysroot=$(SYSROOT) --gcc-toolchain=$(RISCV_TOOLCHAIN_PATH) -march=rv32imf -mabi=ilp32f -Xclang -target-feature -Xclang +vortex -I$(VORTEX_RT_PATH)/include -fno-rtti -fno-exceptions -ffreestanding -nostartfiles -fdata-sections -ffunction-sections"
K_LDFLAGS += "-Wl,-Bstatic,-T$(VORTEX_RT_PATH)/linker/vx_link.ld -Wl,--gc-sections $(VORTEX_RT_PATH)/libvortexrt.a -lm" K_LDFLAGS += "-Wl,-Bstatic,-T$(VORTEX_RT_PATH)/linker/vx_link$(XLEN).ld -Wl,--gc-sections $(VORTEX_RT_PATH)/libvortexrt.a -lm"
CXXFLAGS += -std=c++11 -Wall -Wextra -pedantic -Wfatal-errors CXXFLAGS += -std=c++11 -Wall -Wextra -pedantic -Wfatal-errors

View File

@@ -1,3 +1,5 @@
XLEN ?= 32
LLVM_PREFIX ?= /opt/llvm-riscv LLVM_PREFIX ?= /opt/llvm-riscv
RISCV_TOOLCHAIN_PATH ?= /opt/riscv-gnu-toolchain RISCV_TOOLCHAIN_PATH ?= /opt/riscv-gnu-toolchain
SYSROOT ?= $(RISCV_TOOLCHAIN_PATH)/riscv32-unknown-elf SYSROOT ?= $(RISCV_TOOLCHAIN_PATH)/riscv32-unknown-elf
@@ -9,7 +11,7 @@ VORTEX_RT_PATH ?= $(realpath ../../../runtime)
K_LLCFLAGS += "-O3 -march=riscv32 -target-abi=ilp32f -mcpu=generic-rv32 -mattr=+m,+f -mattr=+vortex -float-abi=hard -code-model=small" K_LLCFLAGS += "-O3 -march=riscv32 -target-abi=ilp32f -mcpu=generic-rv32 -mattr=+m,+f -mattr=+vortex -float-abi=hard -code-model=small"
K_CFLAGS += "-v -O3 --sysroot=$(SYSROOT) --gcc-toolchain=$(RISCV_TOOLCHAIN_PATH) -march=rv32imf -mabi=ilp32f -Xclang -target-feature -Xclang +vortex -I$(VORTEX_RT_PATH)/include -fno-rtti -fno-exceptions -ffreestanding -nostartfiles -fdata-sections -ffunction-sections" K_CFLAGS += "-v -O3 --sysroot=$(SYSROOT) --gcc-toolchain=$(RISCV_TOOLCHAIN_PATH) -march=rv32imf -mabi=ilp32f -Xclang -target-feature -Xclang +vortex -I$(VORTEX_RT_PATH)/include -fno-rtti -fno-exceptions -ffreestanding -nostartfiles -fdata-sections -ffunction-sections"
K_LDFLAGS += "-Wl,-Bstatic,-T$(VORTEX_RT_PATH)/linker/vx_link.ld -Wl,--gc-sections $(VORTEX_RT_PATH)/libvortexrt.a -lm" K_LDFLAGS += "-Wl,-Bstatic,-T$(VORTEX_RT_PATH)/linker/vx_link$(XLEN).ld -Wl,--gc-sections $(VORTEX_RT_PATH)/libvortexrt.a -lm"
CXXFLAGS += -std=c++11 -Wall -Wextra -pedantic -Wfatal-errors CXXFLAGS += -std=c++11 -Wall -Wextra -pedantic -Wfatal-errors

View File

@@ -1,3 +1,5 @@
XLEN ?= 32
RISCV_TOOLCHAIN_PATH ?= $(wildcard ../../../../riscv-gnu-toolchain/drops) RISCV_TOOLCHAIN_PATH ?= $(wildcard ../../../../riscv-gnu-toolchain/drops)
POCL_CC_PATH ?= $(wildcard ../../../../pocl/drops_riscv_cc) POCL_CC_PATH ?= $(wildcard ../../../../pocl/drops_riscv_cc)
POCL_INC_PATH ?= $(wildcard ../include) POCL_INC_PATH ?= $(wildcard ../include)
@@ -19,7 +21,7 @@ VX_SRCS += $(VORTEX_RT_PATH)/fileio/fileio.S
VX_SRCS += $(VORTEX_RT_PATH)/tests/tests.c VX_SRCS += $(VORTEX_RT_PATH)/tests/tests.c
VX_SRCS += $(VORTEX_RT_PATH)/vx_api/vx_api.c VX_SRCS += $(VORTEX_RT_PATH)/vx_api/vx_api.c
VX_CFLAGS = -nostartfiles -Wl,-Bstatic,-T,$(VORTEX_RT_PATH)/startup/vx_link.ld VX_CFLAGS = -nostartfiles -Wl,-Bstatic,-T,$(VORTEX_RT_PATH)/startup/vx_link$(XLEN).ld
CXXFLAGS = -g -O0 -march=rv32im -mabi=ilp32 CXXFLAGS = -g -O0 -march=rv32im -mabi=ilp32
CXXFLAGS += -ffreestanding # program may not begin at main() CXXFLAGS += -ffreestanding # program may not begin at main()
@@ -52,7 +54,7 @@ $(PROJECT).dump: $(PROJECT).elf
$(DMP) -D $(PROJECT).elf > $(PROJECT).dump $(DMP) -D $(PROJECT).elf > $(PROJECT).dump
run: $(PROJECT).hex run: $(PROJECT).hex
POCL_DEBUG=all $(VX_SIMX_PATH)/Vcache_simX -E -a rv32i --core $(PROJECT).hex -s -b 1> emulator.debug POCL_DEBUG=all $(VX_SIMX_PATH)/Vcache_simX -E $(PROJECT).hex -s -b 1> emulator.debug
qemu: $(PROJECT).qemu qemu: $(PROJECT).qemu
POCL_DEBUG=all $(RISCV_TOOLCHAIN_PATH)/bin/qemu-riscv32 -d in_asm -D debug.log $(PROJECT).qemu POCL_DEBUG=all $(RISCV_TOOLCHAIN_PATH)/bin/qemu-riscv32 -d in_asm -D debug.log $(PROJECT).qemu

View File

@@ -1,3 +1,5 @@
XLEN ?= 32
LLVM_PREFIX ?= /opt/llvm-riscv LLVM_PREFIX ?= /opt/llvm-riscv
RISCV_TOOLCHAIN_PATH ?= /opt/riscv-gnu-toolchain RISCV_TOOLCHAIN_PATH ?= /opt/riscv-gnu-toolchain
SYSROOT ?= $(RISCV_TOOLCHAIN_PATH)/riscv32-unknown-elf SYSROOT ?= $(RISCV_TOOLCHAIN_PATH)/riscv32-unknown-elf
@@ -9,7 +11,7 @@ VORTEX_RT_PATH ?= $(realpath ../../../runtime)
K_LLCFLAGS += "-O3 -march=riscv32 -target-abi=ilp32f -mcpu=generic-rv32 -mattr=+m,+f -mattr=+vortex -float-abi=hard -code-model=small" K_LLCFLAGS += "-O3 -march=riscv32 -target-abi=ilp32f -mcpu=generic-rv32 -mattr=+m,+f -mattr=+vortex -float-abi=hard -code-model=small"
K_CFLAGS += "-v -O3 --sysroot=$(SYSROOT) --gcc-toolchain=$(RISCV_TOOLCHAIN_PATH) -march=rv32imf -mabi=ilp32f -Xclang -target-feature -Xclang +vortex -I$(VORTEX_RT_PATH)/include -fno-rtti -fno-exceptions -ffreestanding -nostartfiles -fdata-sections -ffunction-sections" K_CFLAGS += "-v -O3 --sysroot=$(SYSROOT) --gcc-toolchain=$(RISCV_TOOLCHAIN_PATH) -march=rv32imf -mabi=ilp32f -Xclang -target-feature -Xclang +vortex -I$(VORTEX_RT_PATH)/include -fno-rtti -fno-exceptions -ffreestanding -nostartfiles -fdata-sections -ffunction-sections"
K_LDFLAGS += "-Wl,-Bstatic,-T$(VORTEX_RT_PATH)/linker/vx_link.ld -Wl,--gc-sections $(VORTEX_RT_PATH)/libvortexrt.a -lm" K_LDFLAGS += "-Wl,-Bstatic,-T$(VORTEX_RT_PATH)/linker/vx_link$(XLEN).ld -Wl,--gc-sections $(VORTEX_RT_PATH)/libvortexrt.a -lm"
CXXFLAGS += -std=c++11 -Wall -Wextra -Wfatal-errors CXXFLAGS += -std=c++11 -Wall -Wextra -Wfatal-errors

View File

@@ -1,3 +1,5 @@
XLEN ?= 32
LLVM_PREFIX ?= /opt/llvm-riscv LLVM_PREFIX ?= /opt/llvm-riscv
RISCV_TOOLCHAIN_PATH ?= /opt/riscv-gnu-toolchain RISCV_TOOLCHAIN_PATH ?= /opt/riscv-gnu-toolchain
SYSROOT ?= $(RISCV_TOOLCHAIN_PATH)/riscv32-unknown-elf SYSROOT ?= $(RISCV_TOOLCHAIN_PATH)/riscv32-unknown-elf
@@ -9,7 +11,7 @@ VORTEX_RT_PATH ?= $(realpath ../../../runtime)
K_LLCFLAGS += "-O3 -march=riscv32 -target-abi=ilp32f -mcpu=generic-rv32 -mattr=+m,+f -mattr=+vortex -float-abi=hard -code-model=small" K_LLCFLAGS += "-O3 -march=riscv32 -target-abi=ilp32f -mcpu=generic-rv32 -mattr=+m,+f -mattr=+vortex -float-abi=hard -code-model=small"
K_CFLAGS += "-v -O3 --sysroot=$(SYSROOT) --gcc-toolchain=$(RISCV_TOOLCHAIN_PATH) -march=rv32imf -mabi=ilp32f -Xclang -target-feature -Xclang +vortex -I$(VORTEX_RT_PATH)/include -fno-rtti -fno-exceptions -ffreestanding -nostartfiles -fdata-sections -ffunction-sections" K_CFLAGS += "-v -O3 --sysroot=$(SYSROOT) --gcc-toolchain=$(RISCV_TOOLCHAIN_PATH) -march=rv32imf -mabi=ilp32f -Xclang -target-feature -Xclang +vortex -I$(VORTEX_RT_PATH)/include -fno-rtti -fno-exceptions -ffreestanding -nostartfiles -fdata-sections -ffunction-sections"
K_LDFLAGS += "-Wl,-Bstatic,-T$(VORTEX_RT_PATH)/linker/vx_link.ld -Wl,--gc-sections $(VORTEX_RT_PATH)/libvortexrt.a -lm" K_LDFLAGS += "-Wl,-Bstatic,-T$(VORTEX_RT_PATH)/linker/vx_link$(XLEN).ld -Wl,--gc-sections $(VORTEX_RT_PATH)/libvortexrt.a -lm"
CXXFLAGS += -std=c++11 -Wall -Wextra -pedantic -Wfatal-errors CXXFLAGS += -std=c++11 -Wall -Wextra -pedantic -Wfatal-errors

View File

@@ -1,3 +1,5 @@
XLEN ?= 32
RISCV_TOOLCHAIN_PATH ?= $(wildcard ../../../../riscv-gnu-toolchain/drops) RISCV_TOOLCHAIN_PATH ?= $(wildcard ../../../../riscv-gnu-toolchain/drops)
POCL_CC_PATH ?= $(wildcard ../../../../pocl/drops_riscv_cc) POCL_CC_PATH ?= $(wildcard ../../../../pocl/drops_riscv_cc)
POCL_INC_PATH ?= $(wildcard ../include) POCL_INC_PATH ?= $(wildcard ../include)
@@ -19,7 +21,7 @@ VX_SRCS += $(VORTEX_RT_PATH)/fileio/fileio.S
VX_SRCS += $(VORTEX_RT_PATH)/tests/tests.c VX_SRCS += $(VORTEX_RT_PATH)/tests/tests.c
VX_SRCS += $(VORTEX_RT_PATH)/vx_api/vx_api.c VX_SRCS += $(VORTEX_RT_PATH)/vx_api/vx_api.c
VX_CFLAGS = -nostartfiles -Wl,-Bstatic,-T,$(VORTEX_RT_PATH)/startup/vx_link.ld VX_CFLAGS = -nostartfiles -Wl,-Bstatic,-T,$(VORTEX_RT_PATH)/startup/vx_link$(XLEN).ld
CXXFLAGS = -g -O0 -march=rv32im -mabi=ilp32 CXXFLAGS = -g -O0 -march=rv32im -mabi=ilp32
CXXFLAGS += -ffreestanding # program may not begin at main() CXXFLAGS += -ffreestanding # program may not begin at main()
@@ -52,7 +54,7 @@ $(PROJECT).dump: $(PROJECT).elf
$(DMP) -D $(PROJECT).elf > $(PROJECT).dump $(DMP) -D $(PROJECT).elf > $(PROJECT).dump
run: $(PROJECT).hex run: $(PROJECT).hex
POCL_DEBUG=all $(VX_SIMX_PATH)/Vcache_simX -E -a rv32i --core $(PROJECT).hex -s -b 1> emulator.debug POCL_DEBUG=all $(VX_SIMX_PATH)/Vcache_simX -E $(PROJECT).hex -s -b 1> emulator.debug
qemu: $(PROJECT).qemu qemu: $(PROJECT).qemu
POCL_DEBUG=all $(RISCV_TOOLCHAIN_PATH)/bin/qemu-riscv32 -d in_asm -D debug.log $(PROJECT).qemu POCL_DEBUG=all $(RISCV_TOOLCHAIN_PATH)/bin/qemu-riscv32 -d in_asm -D debug.log $(PROJECT).qemu

View File

@@ -1,3 +1,5 @@
XLEN ?= 32
RISCV_TOOLCHAIN_PATH ?= $(wildcard ../../../../riscv-gnu-toolchain/drops) RISCV_TOOLCHAIN_PATH ?= $(wildcard ../../../../riscv-gnu-toolchain/drops)
POCL_CC_PATH ?= $(wildcard ../../../../pocl/drops_riscv_cc) POCL_CC_PATH ?= $(wildcard ../../../../pocl/drops_riscv_cc)
POCL_INC_PATH ?= $(wildcard ../include) POCL_INC_PATH ?= $(wildcard ../include)
@@ -19,7 +21,7 @@ VX_SRCS += $(VORTEX_RT_PATH)/fileio/fileio.S
VX_SRCS += $(VORTEX_RT_PATH)/tests/tests.c VX_SRCS += $(VORTEX_RT_PATH)/tests/tests.c
VX_SRCS += $(VORTEX_RT_PATH)/vx_api/vx_api.c VX_SRCS += $(VORTEX_RT_PATH)/vx_api/vx_api.c
VX_CFLAGS = -nostartfiles -Wl,-Bstatic,-T,$(VORTEX_RT_PATH)/startup/vx_link.ld VX_CFLAGS = -nostartfiles -Wl,-Bstatic,-T,$(VORTEX_RT_PATH)/startup/vx_link$(XLEN).ld
CXXFLAGS = -g -O0 -march=rv32im -mabi=ilp32 CXXFLAGS = -g -O0 -march=rv32im -mabi=ilp32
CXXFLAGS += -ffreestanding # program may not begin at main() CXXFLAGS += -ffreestanding # program may not begin at main()
@@ -52,7 +54,7 @@ $(PROJECT).dump: $(PROJECT).elf
$(DMP) -D $(PROJECT).elf > $(PROJECT).dump $(DMP) -D $(PROJECT).elf > $(PROJECT).dump
run: $(PROJECT).hex run: $(PROJECT).hex
POCL_DEBUG=all $(VX_SIMX_PATH)/Vcache_simX -E -a rv32i --core $(PROJECT).hex -s -b 1> emulator.debug POCL_DEBUG=all $(VX_SIMX_PATH)/Vcache_simX -E $(PROJECT).hex -s -b 1> emulator.debug
qemu: $(PROJECT).qemu qemu: $(PROJECT).qemu
POCL_DEBUG=all $(RISCV_TOOLCHAIN_PATH)/bin/qemu-riscv32 -d in_asm -D debug.log $(PROJECT).qemu POCL_DEBUG=all $(RISCV_TOOLCHAIN_PATH)/bin/qemu-riscv32 -d in_asm -D debug.log $(PROJECT).qemu

View File

@@ -1,3 +1,5 @@
XLEN ?= 32
LLVM_PREFIX ?= /opt/llvm-riscv LLVM_PREFIX ?= /opt/llvm-riscv
RISCV_TOOLCHAIN_PATH ?= /opt/riscv-gnu-toolchain RISCV_TOOLCHAIN_PATH ?= /opt/riscv-gnu-toolchain
SYSROOT ?= $(RISCV_TOOLCHAIN_PATH)/riscv32-unknown-elf SYSROOT ?= $(RISCV_TOOLCHAIN_PATH)/riscv32-unknown-elf
@@ -11,7 +13,7 @@ VORTEX_RT_PATH ?= $(realpath ../../../runtime)
K_LLCFLAGS += "-O3 -march=riscv32 -target-abi=ilp32f -mcpu=generic-rv32 -mattr=+m,+f -mattr=+vortex -float-abi=hard -code-model=small" K_LLCFLAGS += "-O3 -march=riscv32 -target-abi=ilp32f -mcpu=generic-rv32 -mattr=+m,+f -mattr=+vortex -float-abi=hard -code-model=small"
K_CFLAGS += "-v -O3 --sysroot=$(SYSROOT) --gcc-toolchain=$(RISCV_TOOLCHAIN_PATH) -march=rv32imf -mabi=ilp32f -Xclang -target-feature -Xclang +vortex -I$(VORTEX_RT_PATH)/include -fno-rtti -fno-exceptions -ffreestanding -nostartfiles -fdata-sections -ffunction-sections" K_CFLAGS += "-v -O3 --sysroot=$(SYSROOT) --gcc-toolchain=$(RISCV_TOOLCHAIN_PATH) -march=rv32imf -mabi=ilp32f -Xclang -target-feature -Xclang +vortex -I$(VORTEX_RT_PATH)/include -fno-rtti -fno-exceptions -ffreestanding -nostartfiles -fdata-sections -ffunction-sections"
K_LDFLAGS += "-Wl,-Bstatic,-T$(VORTEX_RT_PATH)/linker/vx_link.ld -Wl,--gc-sections $(VORTEX_RT_PATH)/libvortexrt.a -lm" K_LDFLAGS += "-Wl,-Bstatic,-T$(VORTEX_RT_PATH)/linker/vx_link$(XLEN).ld -Wl,--gc-sections $(VORTEX_RT_PATH)/libvortexrt.a -lm"
CXXFLAGS += -std=c++11 -Wall -Wextra -Wfatal-errors CXXFLAGS += -std=c++11 -Wall -Wextra -Wfatal-errors

View File

@@ -1,3 +1,5 @@
XLEN ?= 32
LLVM_PREFIX ?= /opt/llvm-riscv LLVM_PREFIX ?= /opt/llvm-riscv
RISCV_TOOLCHAIN_PATH ?= /opt/riscv-gnu-toolchain RISCV_TOOLCHAIN_PATH ?= /opt/riscv-gnu-toolchain
SYSROOT ?= $(RISCV_TOOLCHAIN_PATH)/riscv32-unknown-elf SYSROOT ?= $(RISCV_TOOLCHAIN_PATH)/riscv32-unknown-elf
@@ -11,7 +13,7 @@ VORTEX_RT_PATH ?= $(realpath ../../../runtime)
K_LLCFLAGS += "-O3 -march=riscv32 -target-abi=ilp32f -mcpu=generic-rv32 -mattr=+m,+f -mattr=+vortex -float-abi=hard -code-model=small" K_LLCFLAGS += "-O3 -march=riscv32 -target-abi=ilp32f -mcpu=generic-rv32 -mattr=+m,+f -mattr=+vortex -float-abi=hard -code-model=small"
K_CFLAGS += "-v -O3 --sysroot=$(SYSROOT) --gcc-toolchain=$(RISCV_TOOLCHAIN_PATH) -march=rv32imf -mabi=ilp32f -Xclang -target-feature -Xclang +vortex -I$(VORTEX_RT_PATH)/include -fno-rtti -fno-exceptions -ffreestanding -nostartfiles -fdata-sections -ffunction-sections" K_CFLAGS += "-v -O3 --sysroot=$(SYSROOT) --gcc-toolchain=$(RISCV_TOOLCHAIN_PATH) -march=rv32imf -mabi=ilp32f -Xclang -target-feature -Xclang +vortex -I$(VORTEX_RT_PATH)/include -fno-rtti -fno-exceptions -ffreestanding -nostartfiles -fdata-sections -ffunction-sections"
K_LDFLAGS += "-Wl,-Bstatic,-T$(VORTEX_RT_PATH)/linker/vx_link.ld -Wl,--gc-sections $(VORTEX_RT_PATH)/libvortexrt.a -lm" K_LDFLAGS += "-Wl,-Bstatic,-T$(VORTEX_RT_PATH)/linker/vx_link$(XLEN).ld -Wl,--gc-sections $(VORTEX_RT_PATH)/libvortexrt.a -lm"
CXXFLAGS += -std=c++11 -Wall -Wextra -Wfatal-errors CXXFLAGS += -std=c++11 -Wall -Wextra -Wfatal-errors

View File

@@ -1,3 +1,5 @@
XLEN ?= 32
LLVM_PREFIX ?= /opt/llvm-riscv LLVM_PREFIX ?= /opt/llvm-riscv
RISCV_TOOLCHAIN_PATH ?= /opt/riscv-gnu-toolchain RISCV_TOOLCHAIN_PATH ?= /opt/riscv-gnu-toolchain
SYSROOT ?= $(RISCV_TOOLCHAIN_PATH)/riscv32-unknown-elf SYSROOT ?= $(RISCV_TOOLCHAIN_PATH)/riscv32-unknown-elf
@@ -11,7 +13,7 @@ VORTEX_RT_PATH ?= $(realpath ../../../runtime)
K_LLCFLAGS += "-O3 -march=riscv32 -target-abi=ilp32f -mcpu=generic-rv32 -mattr=+m,+f -mattr=+vortex -float-abi=hard -code-model=small" K_LLCFLAGS += "-O3 -march=riscv32 -target-abi=ilp32f -mcpu=generic-rv32 -mattr=+m,+f -mattr=+vortex -float-abi=hard -code-model=small"
K_CFLAGS += "-v -O3 --sysroot=$(SYSROOT) --gcc-toolchain=$(RISCV_TOOLCHAIN_PATH) -march=rv32imf -mabi=ilp32f -Xclang -target-feature -Xclang +vortex -I$(VORTEX_RT_PATH)/include -fno-rtti -fno-exceptions -ffreestanding -nostartfiles -fdata-sections -ffunction-sections" K_CFLAGS += "-v -O3 --sysroot=$(SYSROOT) --gcc-toolchain=$(RISCV_TOOLCHAIN_PATH) -march=rv32imf -mabi=ilp32f -Xclang -target-feature -Xclang +vortex -I$(VORTEX_RT_PATH)/include -fno-rtti -fno-exceptions -ffreestanding -nostartfiles -fdata-sections -ffunction-sections"
K_LDFLAGS += "-Wl,-Bstatic,-T$(VORTEX_RT_PATH)/linker/vx_link.ld -Wl,--gc-sections $(VORTEX_RT_PATH)/libvortexrt.a -lm" K_LDFLAGS += "-Wl,-Bstatic,-T$(VORTEX_RT_PATH)/linker/vx_link$(XLEN).ld -Wl,--gc-sections $(VORTEX_RT_PATH)/libvortexrt.a -lm"
CXXFLAGS += -std=c++11 -Wall -Wextra -Wfatal-errors CXXFLAGS += -std=c++11 -Wall -Wextra -Wfatal-errors

View File

@@ -1,3 +1,5 @@
XLEN ?= 32
RISCV_TOOLCHAIN_PATH ?= $(wildcard ../../../../riscv-gnu-toolchain/drops) RISCV_TOOLCHAIN_PATH ?= $(wildcard ../../../../riscv-gnu-toolchain/drops)
POCL_CC_PATH ?= $(wildcard ../../../../pocl/drops_riscv_cc) POCL_CC_PATH ?= $(wildcard ../../../../pocl/drops_riscv_cc)
POCL_INC_PATH ?= $(wildcard ../include) POCL_INC_PATH ?= $(wildcard ../include)
@@ -19,7 +21,7 @@ VX_SRCS += $(VORTEX_RT_PATH)/fileio/fileio.S
VX_SRCS += $(VORTEX_RT_PATH)/tests/tests.c VX_SRCS += $(VORTEX_RT_PATH)/tests/tests.c
VX_SRCS += $(VORTEX_RT_PATH)/vx_api/vx_api.c VX_SRCS += $(VORTEX_RT_PATH)/vx_api/vx_api.c
VX_CFLAGS = -nostartfiles -Wl,-Bstatic,-T,$(VORTEX_RT_PATH)/startup/vx_link.ld VX_CFLAGS = -nostartfiles -Wl,-Bstatic,-T,$(VORTEX_RT_PATH)/startup/vx_link$(XLEN).ld
CXXFLAGS = -g -O0 -march=rv32im -mabi=ilp32 CXXFLAGS = -g -O0 -march=rv32im -mabi=ilp32
CXXFLAGS += -ffreestanding # program may not begin at main() CXXFLAGS += -ffreestanding # program may not begin at main()
@@ -50,7 +52,7 @@ $(PROJECT).dump: $(PROJECT).elf
$(DMP) -D $(PROJECT).elf > $(PROJECT).dump $(DMP) -D $(PROJECT).elf > $(PROJECT).dump
run: $(PROJECT).hex run: $(PROJECT).hex
POCL_DEBUG=all $(VX_SIMX_PATH)/Vcache_simX -E -a rv32i --core $(PROJECT).hex -s -b 1> emulator.debug POCL_DEBUG=all $(VX_SIMX_PATH)/Vcache_simX -E $(PROJECT).hex -s -b 1> emulator.debug
qemu: $(PROJECT).qemu qemu: $(PROJECT).qemu
POCL_DEBUG=all $(RISCV_TOOLCHAIN_PATH)/bin/qemu-riscv32 -d in_asm -D debug.log $(PROJECT).qemu POCL_DEBUG=all $(RISCV_TOOLCHAIN_PATH)/bin/qemu-riscv32 -d in_asm -D debug.log $(PROJECT).qemu

View File

@@ -1,3 +1,5 @@
XLEN ?= 32
RISCV_TOOLCHAIN_PATH ?= $(wildcard ../../../../riscv-gnu-toolchain/drops) RISCV_TOOLCHAIN_PATH ?= $(wildcard ../../../../riscv-gnu-toolchain/drops)
POCL_CC_PATH ?= $(wildcard ../../../../pocl/drops_riscv_cc) POCL_CC_PATH ?= $(wildcard ../../../../pocl/drops_riscv_cc)
POCL_INC_PATH ?= $(wildcard ../include) POCL_INC_PATH ?= $(wildcard ../include)
@@ -19,7 +21,7 @@ VX_SRCS += $(VORTEX_RT_PATH)/fileio/fileio.S
VX_SRCS += $(VORTEX_RT_PATH)/tests/tests.c VX_SRCS += $(VORTEX_RT_PATH)/tests/tests.c
VX_SRCS += $(VORTEX_RT_PATH)/vx_api/vx_api.c VX_SRCS += $(VORTEX_RT_PATH)/vx_api/vx_api.c
VX_CFLAGS = -nostartfiles -Wl,-Bstatic,-T,$(VORTEX_RT_PATH)/startup/vx_link.ld VX_CFLAGS = -nostartfiles -Wl,-Bstatic,-T,$(VORTEX_RT_PATH)/startup/vx_link$(XLEN).ld
CXXFLAGS = -g -O0 -march=rv32im -mabi=ilp32 CXXFLAGS = -g -O0 -march=rv32im -mabi=ilp32
CXXFLAGS += -ffreestanding # program may not begin at main() CXXFLAGS += -ffreestanding # program may not begin at main()
@@ -52,7 +54,7 @@ $(PROJECT).dump: $(PROJECT).elf
$(DMP) -D $(PROJECT).elf > $(PROJECT).dump $(DMP) -D $(PROJECT).elf > $(PROJECT).dump
run: $(PROJECT).hex run: $(PROJECT).hex
POCL_DEBUG=all $(VX_SIMX_PATH)/Vcache_simX -E -a rv32i --core $(PROJECT).hex -s -b 1> emulator.debug POCL_DEBUG=all $(VX_SIMX_PATH)/Vcache_simX -E $(PROJECT).hex -s -b 1> emulator.debug
qemu: $(PROJECT).qemu qemu: $(PROJECT).qemu
POCL_DEBUG=all $(RISCV_TOOLCHAIN_PATH)/bin/qemu-riscv32 -d in_asm -D debug.log $(PROJECT).qemu POCL_DEBUG=all $(RISCV_TOOLCHAIN_PATH)/bin/qemu-riscv32 -d in_asm -D debug.log $(PROJECT).qemu

View File

@@ -1,3 +1,5 @@
XLEN ?= 32
LLVM_PREFIX ?= /opt/llvm-riscv LLVM_PREFIX ?= /opt/llvm-riscv
RISCV_TOOLCHAIN_PATH ?= /opt/riscv-gnu-toolchain RISCV_TOOLCHAIN_PATH ?= /opt/riscv-gnu-toolchain
SYSROOT ?= $(RISCV_TOOLCHAIN_PATH)/riscv32-unknown-elf SYSROOT ?= $(RISCV_TOOLCHAIN_PATH)/riscv32-unknown-elf
@@ -11,7 +13,7 @@ OPTS ?= -n1024
K_LLCFLAGS += "-O3 -march=riscv32 -target-abi=ilp32f -mcpu=generic-rv32 -mattr=+m,+f -mattr=+vortex -float-abi=hard -code-model=small" K_LLCFLAGS += "-O3 -march=riscv32 -target-abi=ilp32f -mcpu=generic-rv32 -mattr=+m,+f -mattr=+vortex -float-abi=hard -code-model=small"
K_CFLAGS += "-v -O3 --sysroot=$(SYSROOT) --gcc-toolchain=$(RISCV_TOOLCHAIN_PATH) -march=rv32imf -mabi=ilp32f -Xclang -target-feature -Xclang +vortex -I$(VORTEX_RT_PATH)/include -fno-rtti -fno-exceptions -ffreestanding -nostartfiles -fdata-sections -ffunction-sections" K_CFLAGS += "-v -O3 --sysroot=$(SYSROOT) --gcc-toolchain=$(RISCV_TOOLCHAIN_PATH) -march=rv32imf -mabi=ilp32f -Xclang -target-feature -Xclang +vortex -I$(VORTEX_RT_PATH)/include -fno-rtti -fno-exceptions -ffreestanding -nostartfiles -fdata-sections -ffunction-sections"
K_LDFLAGS += "-Wl,-Bstatic,-T$(VORTEX_RT_PATH)/linker/vx_link.ld -Wl,--gc-sections $(VORTEX_RT_PATH)/libvortexrt.a -lm" K_LDFLAGS += "-Wl,-Bstatic,-T$(VORTEX_RT_PATH)/linker/vx_link$(XLEN).ld -Wl,--gc-sections $(VORTEX_RT_PATH)/libvortexrt.a -lm"
CXXFLAGS += -std=c++11 -Wall -Wextra -Wfatal-errors CXXFLAGS += -std=c++11 -Wall -Wextra -Wfatal-errors

View File

@@ -1,3 +1,5 @@
XLEN ?= 32
LLVM_PREFIX ?= /opt/llvm-riscv LLVM_PREFIX ?= /opt/llvm-riscv
RISCV_TOOLCHAIN_PATH ?= /opt/riscv-gnu-toolchain RISCV_TOOLCHAIN_PATH ?= /opt/riscv-gnu-toolchain
SYSROOT ?= $(RISCV_TOOLCHAIN_PATH)/riscv32-unknown-elf SYSROOT ?= $(RISCV_TOOLCHAIN_PATH)/riscv32-unknown-elf
@@ -11,7 +13,7 @@ OPTS ?= -n16
K_LLCFLAGS += "-O3 -march=riscv32 -target-abi=ilp32f -mcpu=generic-rv32 -mattr=+m,+f -mattr=+vortex -float-abi=hard -code-model=small" K_LLCFLAGS += "-O3 -march=riscv32 -target-abi=ilp32f -mcpu=generic-rv32 -mattr=+m,+f -mattr=+vortex -float-abi=hard -code-model=small"
K_CFLAGS += "-v -O3 --sysroot=$(SYSROOT) --gcc-toolchain=$(RISCV_TOOLCHAIN_PATH) -march=rv32imf -mabi=ilp32f -Xclang -target-feature -Xclang +vortex -I$(VORTEX_RT_PATH)/include -fno-rtti -fno-exceptions -ffreestanding -nostartfiles -fdata-sections -ffunction-sections" K_CFLAGS += "-v -O3 --sysroot=$(SYSROOT) --gcc-toolchain=$(RISCV_TOOLCHAIN_PATH) -march=rv32imf -mabi=ilp32f -Xclang -target-feature -Xclang +vortex -I$(VORTEX_RT_PATH)/include -fno-rtti -fno-exceptions -ffreestanding -nostartfiles -fdata-sections -ffunction-sections"
K_LDFLAGS += "-Wl,-Bstatic,-T$(VORTEX_RT_PATH)/linker/vx_link.ld -Wl,--gc-sections $(VORTEX_RT_PATH)/libvortexrt.a -lm" K_LDFLAGS += "-Wl,-Bstatic,-T$(VORTEX_RT_PATH)/linker/vx_link$(XLEN).ld -Wl,--gc-sections $(VORTEX_RT_PATH)/libvortexrt.a -lm"
CXXFLAGS += -std=c++11 -Wall -Wextra -Wfatal-errors CXXFLAGS += -std=c++11 -Wall -Wextra -Wfatal-errors

View File

@@ -1,3 +1,5 @@
XLEN ?= 32
LLVM_PREFIX ?= /opt/llvm-riscv LLVM_PREFIX ?= /opt/llvm-riscv
RISCV_TOOLCHAIN_PATH ?= /opt/riscv-gnu-toolchain RISCV_TOOLCHAIN_PATH ?= /opt/riscv-gnu-toolchain
SYSROOT ?= $(RISCV_TOOLCHAIN_PATH)/riscv32-unknown-elf SYSROOT ?= $(RISCV_TOOLCHAIN_PATH)/riscv32-unknown-elf
@@ -11,7 +13,7 @@ VORTEX_RT_PATH ?= $(realpath ../../../runtime)
K_LLCFLAGS += "-O3 -march=riscv32 -target-abi=ilp32f -mcpu=generic-rv32 -mattr=+m,+f -mattr=+vortex -float-abi=hard -code-model=small" K_LLCFLAGS += "-O3 -march=riscv32 -target-abi=ilp32f -mcpu=generic-rv32 -mattr=+m,+f -mattr=+vortex -float-abi=hard -code-model=small"
K_CFLAGS += "-v -O3 --sysroot=$(SYSROOT) --gcc-toolchain=$(RISCV_TOOLCHAIN_PATH) -march=rv32imf -mabi=ilp32f -Xclang -target-feature -Xclang +vortex -I$(VORTEX_RT_PATH)/include -fno-rtti -fno-exceptions -ffreestanding -nostartfiles -fdata-sections -ffunction-sections" K_CFLAGS += "-v -O3 --sysroot=$(SYSROOT) --gcc-toolchain=$(RISCV_TOOLCHAIN_PATH) -march=rv32imf -mabi=ilp32f -Xclang -target-feature -Xclang +vortex -I$(VORTEX_RT_PATH)/include -fno-rtti -fno-exceptions -ffreestanding -nostartfiles -fdata-sections -ffunction-sections"
K_LDFLAGS += "-Wl,-Bstatic,-T$(VORTEX_RT_PATH)/linker/vx_link.ld -Wl,--gc-sections $(VORTEX_RT_PATH)/libvortexrt.a -lm" K_LDFLAGS += "-Wl,-Bstatic,-T$(VORTEX_RT_PATH)/linker/vx_link$(XLEN).ld -Wl,--gc-sections $(VORTEX_RT_PATH)/libvortexrt.a -lm"
CXXFLAGS += -std=c++11 -Wall -Wextra -Wfatal-errors CXXFLAGS += -std=c++11 -Wall -Wextra -Wfatal-errors

View File

@@ -1,3 +1,5 @@
XLEN ?= 32
RISCV_TOOLCHAIN_PATH ?= $(wildcard ../../../../riscv-gnu-toolchain/drops) RISCV_TOOLCHAIN_PATH ?= $(wildcard ../../../../riscv-gnu-toolchain/drops)
POCL_CC_PATH ?= $(wildcard ../../../../pocl/drops_riscv_cc) POCL_CC_PATH ?= $(wildcard ../../../../pocl/drops_riscv_cc)
POCL_INC_PATH ?= $(wildcard ../include) POCL_INC_PATH ?= $(wildcard ../include)
@@ -19,7 +21,7 @@ VX_SRCS += $(VORTEX_RT_PATH)/fileio/fileio.S
VX_SRCS += $(VORTEX_RT_PATH)/tests/tests.c VX_SRCS += $(VORTEX_RT_PATH)/tests/tests.c
VX_SRCS += $(VORTEX_RT_PATH)/vx_api/vx_api.c VX_SRCS += $(VORTEX_RT_PATH)/vx_api/vx_api.c
VX_CFLAGS = -nostartfiles -Wl,-Bstatic,-T,$(VORTEX_RT_PATH)/startup/vx_link.ld VX_CFLAGS = -nostartfiles -Wl,-Bstatic,-T,$(VORTEX_RT_PATH)/startup/vx_link$(XLEN).ld
CXXFLAGS = -g -O0 -march=rv32im -mabi=ilp32 CXXFLAGS = -g -O0 -march=rv32im -mabi=ilp32
CXXFLAGS += -ffreestanding # program may not begin at main() CXXFLAGS += -ffreestanding # program may not begin at main()
@@ -52,7 +54,7 @@ $(PROJECT).dump: $(PROJECT).elf
$(DMP) -D $(PROJECT).elf > $(PROJECT).dump $(DMP) -D $(PROJECT).elf > $(PROJECT).dump
run: $(PROJECT).hex run: $(PROJECT).hex
POCL_DEBUG=all $(VX_SIMX_PATH)/Vcache_simX -E -a rv32i --core $(PROJECT).hex -s -b 1> emulator.debug POCL_DEBUG=all $(VX_SIMX_PATH)/Vcache_simX -E $(PROJECT).hex -s -b 1> emulator.debug
qemu: $(PROJECT).qemu qemu: $(PROJECT).qemu
POCL_DEBUG=all $(RISCV_TOOLCHAIN_PATH)/bin/qemu-riscv32 -d in_asm -D debug.log $(PROJECT).qemu POCL_DEBUG=all $(RISCV_TOOLCHAIN_PATH)/bin/qemu-riscv32 -d in_asm -D debug.log $(PROJECT).qemu

View File

@@ -1,3 +1,5 @@
XLEN ?= 32
RISCV_TOOLCHAIN_PATH ?= $(wildcard ../../../../riscv-gnu-toolchain/drops) RISCV_TOOLCHAIN_PATH ?= $(wildcard ../../../../riscv-gnu-toolchain/drops)
POCL_CC_PATH ?= $(wildcard ../../../../pocl/drops_riscv_cc) POCL_CC_PATH ?= $(wildcard ../../../../pocl/drops_riscv_cc)
POCL_INC_PATH ?= $(wildcard ../include) POCL_INC_PATH ?= $(wildcard ../include)
@@ -19,7 +21,7 @@ VX_SRCS += $(VORTEX_RT_PATH)/fileio/fileio.S
VX_SRCS += $(VORTEX_RT_PATH)/tests/tests.c VX_SRCS += $(VORTEX_RT_PATH)/tests/tests.c
VX_SRCS += $(VORTEX_RT_PATH)/vx_api/vx_api.c VX_SRCS += $(VORTEX_RT_PATH)/vx_api/vx_api.c
VX_CFLAGS = -nostartfiles -Wl,-Bstatic,-T,$(VORTEX_RT_PATH)/startup/vx_link.ld VX_CFLAGS = -nostartfiles -Wl,-Bstatic,-T,$(VORTEX_RT_PATH)/startup/vx_link$(XLEN).ld
CXXFLAGS = -g -O0 -march=rv32im -mabi=ilp32 CXXFLAGS = -g -O0 -march=rv32im -mabi=ilp32
CXXFLAGS += -ffreestanding # program may not begin at main() CXXFLAGS += -ffreestanding # program may not begin at main()
@@ -53,7 +55,7 @@ $(PROJECT).dump: $(PROJECT).elf
$(DMP) -D $(PROJECT).elf > $(PROJECT).dump $(DMP) -D $(PROJECT).elf > $(PROJECT).dump
run: $(PROJECT).hex run: $(PROJECT).hex
POCL_DEBUG=all $(VX_SIMX_PATH)/Vcache_simX -E -a rv32i --core $(PROJECT).hex -s -b 1> emulator.debug POCL_DEBUG=all $(VX_SIMX_PATH)/Vcache_simX -E $(PROJECT).hex -s -b 1> emulator.debug
qemu: $(PROJECT).qemu qemu: $(PROJECT).qemu
POCL_DEBUG=all $(RISCV_TOOLCHAIN_PATH)/bin/qemu-riscv32 -d in_asm -D debug.log $(PROJECT).qemu POCL_DEBUG=all $(RISCV_TOOLCHAIN_PATH)/bin/qemu-riscv32 -d in_asm -D debug.log $(PROJECT).qemu

View File

@@ -1,3 +1,5 @@
XLEN ?= 32
LLVM_PREFIX ?= /opt/llvm-riscv LLVM_PREFIX ?= /opt/llvm-riscv
RISCV_TOOLCHAIN_PATH ?= /opt/riscv-gnu-toolchain RISCV_TOOLCHAIN_PATH ?= /opt/riscv-gnu-toolchain
SYSROOT ?= $(RISCV_TOOLCHAIN_PATH)/riscv32-unknown-elf SYSROOT ?= $(RISCV_TOOLCHAIN_PATH)/riscv32-unknown-elf
@@ -9,7 +11,7 @@ VORTEX_RT_PATH ?= $(realpath ../../../runtime)
K_LLCFLAGS += "-O3 -march=riscv32 -target-abi=ilp32f -mcpu=generic-rv32 -mattr=+m,+f -mattr=+vortex -float-abi=hard -code-model=small" K_LLCFLAGS += "-O3 -march=riscv32 -target-abi=ilp32f -mcpu=generic-rv32 -mattr=+m,+f -mattr=+vortex -float-abi=hard -code-model=small"
K_CFLAGS += "-v -O3 --sysroot=$(SYSROOT) --gcc-toolchain=$(RISCV_TOOLCHAIN_PATH) -march=rv32imf -mabi=ilp32f -Xclang -target-feature -Xclang +vortex -I$(VORTEX_RT_PATH)/include -fno-rtti -fno-exceptions -ffreestanding -nostartfiles -fdata-sections -ffunction-sections" K_CFLAGS += "-v -O3 --sysroot=$(SYSROOT) --gcc-toolchain=$(RISCV_TOOLCHAIN_PATH) -march=rv32imf -mabi=ilp32f -Xclang -target-feature -Xclang +vortex -I$(VORTEX_RT_PATH)/include -fno-rtti -fno-exceptions -ffreestanding -nostartfiles -fdata-sections -ffunction-sections"
K_LDFLAGS += "-Wl,-Bstatic,-T$(VORTEX_RT_PATH)/linker/vx_link.ld -Wl,--gc-sections $(VORTEX_RT_PATH)/libvortexrt.a -lm" K_LDFLAGS += "-Wl,-Bstatic,-T$(VORTEX_RT_PATH)/linker/vx_link$(XLEN).ld -Wl,--gc-sections $(VORTEX_RT_PATH)/libvortexrt.a -lm"
CXXFLAGS += -std=c++11 -Wall -Wextra -pedantic -Wfatal-errors CXXFLAGS += -std=c++11 -Wall -Wextra -pedantic -Wfatal-errors

View File

@@ -1,3 +1,5 @@
XLEN ?= 32
LLVM_PREFIX ?= /opt/llvm-riscv LLVM_PREFIX ?= /opt/llvm-riscv
RISCV_TOOLCHAIN_PATH ?= /opt/riscv-gnu-toolchain RISCV_TOOLCHAIN_PATH ?= /opt/riscv-gnu-toolchain
SYSROOT ?= $(RISCV_TOOLCHAIN_PATH)/riscv32-unknown-elf SYSROOT ?= $(RISCV_TOOLCHAIN_PATH)/riscv32-unknown-elf
@@ -11,7 +13,7 @@ VORTEX_RT_PATH ?= $(realpath ../../../runtime)
K_LLCFLAGS += "-O3 -march=riscv32 -target-abi=ilp32f -mcpu=generic-rv32 -mattr=+m,+f -mattr=+vortex -float-abi=hard -code-model=small" K_LLCFLAGS += "-O3 -march=riscv32 -target-abi=ilp32f -mcpu=generic-rv32 -mattr=+m,+f -mattr=+vortex -float-abi=hard -code-model=small"
K_CFLAGS += "-v -O3 --sysroot=$(SYSROOT) --gcc-toolchain=$(RISCV_TOOLCHAIN_PATH) -march=rv32imf -mabi=ilp32f -Xclang -target-feature -Xclang +vortex -I$(VORTEX_RT_PATH)/include -fno-rtti -fno-exceptions -ffreestanding -nostartfiles -fdata-sections -ffunction-sections" K_CFLAGS += "-v -O3 --sysroot=$(SYSROOT) --gcc-toolchain=$(RISCV_TOOLCHAIN_PATH) -march=rv32imf -mabi=ilp32f -Xclang -target-feature -Xclang +vortex -I$(VORTEX_RT_PATH)/include -fno-rtti -fno-exceptions -ffreestanding -nostartfiles -fdata-sections -ffunction-sections"
K_LDFLAGS += "-Wl,-Bstatic,-T$(VORTEX_RT_PATH)/linker/vx_link.ld -Wl,--gc-sections $(VORTEX_RT_PATH)/libvortexrt.a -lm" K_LDFLAGS += "-Wl,-Bstatic,-T$(VORTEX_RT_PATH)/linker/vx_link$(XLEN).ld -Wl,--gc-sections $(VORTEX_RT_PATH)/libvortexrt.a -lm"
CXXFLAGS += -std=c++11 -Wall -Wextra -Wfatal-errors CXXFLAGS += -std=c++11 -Wall -Wextra -Wfatal-errors

View File

@@ -1,3 +1,5 @@
XLEN ?= 32
RISCV_TOOLCHAIN_PATH ?= /opt/riscv-gnu-toolchain RISCV_TOOLCHAIN_PATH ?= /opt/riscv-gnu-toolchain
VORTEX_DRV_PATH ?= $(realpath ../../../driver) VORTEX_DRV_PATH ?= $(realpath ../../../driver)
VORTEX_RT_PATH ?= $(realpath ../../../runtime) VORTEX_RT_PATH ?= $(realpath ../../../runtime)
@@ -12,7 +14,7 @@ VX_CP = $(RISCV_TOOLCHAIN_PATH)/bin/riscv32-unknown-elf-objcopy
VX_CFLAGS += -march=rv32imf -mabi=ilp32f -O3 -Wstack-usage=1024 -ffreestanding -nostartfiles -fdata-sections -ffunction-sections VX_CFLAGS += -march=rv32imf -mabi=ilp32f -O3 -Wstack-usage=1024 -ffreestanding -nostartfiles -fdata-sections -ffunction-sections
VX_CFLAGS += -I$(VORTEX_RT_PATH)/include -I$(VORTEX_RT_PATH)/../hw VX_CFLAGS += -I$(VORTEX_RT_PATH)/include -I$(VORTEX_RT_PATH)/../hw
VX_LDFLAGS += -Wl,-Bstatic,-T,$(VORTEX_RT_PATH)/linker/vx_link.ld -Wl,--gc-sections $(VORTEX_RT_PATH)/libvortexrt.a VX_LDFLAGS += -Wl,-Bstatic,-T,$(VORTEX_RT_PATH)/linker/vx_link$(XLEN).ld -Wl,--gc-sections $(VORTEX_RT_PATH)/libvortexrt.a
VX_SRCS = kernel.c VX_SRCS = kernel.c

View File

@@ -1,3 +1,5 @@
XLEN ?= 32
RISCV_TOOLCHAIN_PATH ?= /opt/riscv-gnu-toolchain RISCV_TOOLCHAIN_PATH ?= /opt/riscv-gnu-toolchain
VORTEX_DRV_PATH ?= $(realpath ../../../driver) VORTEX_DRV_PATH ?= $(realpath ../../../driver)
VORTEX_RT_PATH ?= $(realpath ../../../runtime) VORTEX_RT_PATH ?= $(realpath ../../../runtime)
@@ -12,7 +14,7 @@ VX_CP = $(RISCV_TOOLCHAIN_PATH)/bin/riscv32-unknown-elf-objcopy
VX_CFLAGS += -march=rv32imf -mabi=ilp32f -O3 -Wstack-usage=1024 -ffreestanding -nostartfiles -fdata-sections -ffunction-sections VX_CFLAGS += -march=rv32imf -mabi=ilp32f -O3 -Wstack-usage=1024 -ffreestanding -nostartfiles -fdata-sections -ffunction-sections
VX_CFLAGS += -I$(VORTEX_RT_PATH)/include -I$(VORTEX_RT_PATH)/../hw VX_CFLAGS += -I$(VORTEX_RT_PATH)/include -I$(VORTEX_RT_PATH)/../hw
VX_LDFLAGS += -Wl,-Bstatic,-T,$(VORTEX_RT_PATH)/linker/vx_link.ld -Wl,--gc-sections $(VORTEX_RT_PATH)/libvortexrt.a VX_LDFLAGS += -Wl,-Bstatic,-T,$(VORTEX_RT_PATH)/linker/vx_link$(XLEN).ld -Wl,--gc-sections $(VORTEX_RT_PATH)/libvortexrt.a
VX_SRCS = kernel.c VX_SRCS = kernel.c

View File

@@ -1,3 +1,5 @@
XLEN ?= 32
RISCV_TOOLCHAIN_PATH ?= /opt/riscv-gnu-toolchain RISCV_TOOLCHAIN_PATH ?= /opt/riscv-gnu-toolchain
VORTEX_DRV_PATH ?= $(realpath ../../../driver) VORTEX_DRV_PATH ?= $(realpath ../../../driver)
VORTEX_RT_PATH ?= $(realpath ../../../runtime) VORTEX_RT_PATH ?= $(realpath ../../../runtime)
@@ -12,7 +14,7 @@ VX_CP = $(RISCV_TOOLCHAIN_PATH)/bin/riscv32-unknown-elf-objcopy
VX_CFLAGS += -march=rv32imf -mabi=ilp32f -O3 -Wstack-usage=1024 -ffreestanding -nostartfiles -fdata-sections -ffunction-sections VX_CFLAGS += -march=rv32imf -mabi=ilp32f -O3 -Wstack-usage=1024 -ffreestanding -nostartfiles -fdata-sections -ffunction-sections
VX_CFLAGS += -I$(VORTEX_RT_PATH)/include -I$(VORTEX_RT_PATH)/../hw VX_CFLAGS += -I$(VORTEX_RT_PATH)/include -I$(VORTEX_RT_PATH)/../hw
VX_LDFLAGS += -Wl,-Bstatic,-T,$(VORTEX_RT_PATH)/linker/vx_link.ld -Wl,--gc-sections $(VORTEX_RT_PATH)/libvortexrt.a VX_LDFLAGS += -Wl,-Bstatic,-T,$(VORTEX_RT_PATH)/linker/vx_link$(XLEN).ld -Wl,--gc-sections $(VORTEX_RT_PATH)/libvortexrt.a
VX_SRCS = kernel.c VX_SRCS = kernel.c

View File

@@ -1,3 +1,5 @@
XLEN ?= 32
RISCV_TOOLCHAIN_PATH ?= /opt/riscv-gnu-toolchain RISCV_TOOLCHAIN_PATH ?= /opt/riscv-gnu-toolchain
VORTEX_DRV_PATH ?= $(realpath ../../../driver) VORTEX_DRV_PATH ?= $(realpath ../../../driver)
VORTEX_RT_PATH ?= $(realpath ../../../runtime) VORTEX_RT_PATH ?= $(realpath ../../../runtime)
@@ -12,7 +14,7 @@ VX_CP = $(RISCV_TOOLCHAIN_PATH)/bin/riscv32-unknown-elf-objcopy
VX_CFLAGS += -march=rv32imf -mabi=ilp32f -O3 -Wstack-usage=1024 -ffreestanding -nostartfiles -fdata-sections -ffunction-sections VX_CFLAGS += -march=rv32imf -mabi=ilp32f -O3 -Wstack-usage=1024 -ffreestanding -nostartfiles -fdata-sections -ffunction-sections
VX_CFLAGS += -I$(VORTEX_RT_PATH)/include -I$(VORTEX_RT_PATH)/../hw VX_CFLAGS += -I$(VORTEX_RT_PATH)/include -I$(VORTEX_RT_PATH)/../hw
VX_LDFLAGS += -Wl,-Bstatic,-T,$(VORTEX_RT_PATH)/linker/vx_link.ld -Wl,--gc-sections $(VORTEX_RT_PATH)/libvortexrt.a VX_LDFLAGS += -Wl,-Bstatic,-T,$(VORTEX_RT_PATH)/linker/vx_link$(XLEN).ld -Wl,--gc-sections $(VORTEX_RT_PATH)/libvortexrt.a
VX_LDFLAGS += -lm VX_LDFLAGS += -lm

View File

@@ -1,3 +1,5 @@
XLEN ?= 32
RISCV_TOOLCHAIN_PATH ?= /opt/riscv-gnu-toolchain RISCV_TOOLCHAIN_PATH ?= /opt/riscv-gnu-toolchain
VORTEX_DRV_PATH ?= $(realpath ../../../driver) VORTEX_DRV_PATH ?= $(realpath ../../../driver)
VORTEX_RT_PATH ?= $(realpath ../../../runtime) VORTEX_RT_PATH ?= $(realpath ../../../runtime)
@@ -12,7 +14,7 @@ VX_CP = $(RISCV_TOOLCHAIN_PATH)/bin/riscv32-unknown-elf-objcopy
VX_CFLAGS += -march=rv32imf -mabi=ilp32f -O3 -Wstack-usage=1024 -ffreestanding -nostartfiles -fdata-sections -ffunction-sections VX_CFLAGS += -march=rv32imf -mabi=ilp32f -O3 -Wstack-usage=1024 -ffreestanding -nostartfiles -fdata-sections -ffunction-sections
VX_CFLAGS += -I$(VORTEX_RT_PATH)/include -I$(VORTEX_RT_PATH)/../hw VX_CFLAGS += -I$(VORTEX_RT_PATH)/include -I$(VORTEX_RT_PATH)/../hw
VX_LDFLAGS += -Wl,-Bstatic,-T,$(VORTEX_RT_PATH)/linker/vx_link.ld -Wl,--gc-sections $(VORTEX_RT_PATH)/libvortexrt.a VX_LDFLAGS += -Wl,-Bstatic,-T,$(VORTEX_RT_PATH)/linker/vx_link$(XLEN).ld -Wl,--gc-sections $(VORTEX_RT_PATH)/libvortexrt.a
VX_SRCS = kernel.c VX_SRCS = kernel.c

View File

@@ -1,3 +1,5 @@
XLEN ?= 32
RISCV_TOOLCHAIN_PATH ?= /opt/riscv-gnu-toolchain RISCV_TOOLCHAIN_PATH ?= /opt/riscv-gnu-toolchain
VORTEX_DRV_PATH ?= $(realpath ../../../driver) VORTEX_DRV_PATH ?= $(realpath ../../../driver)
VORTEX_RT_PATH ?= $(realpath ../../../runtime) VORTEX_RT_PATH ?= $(realpath ../../../runtime)
@@ -12,7 +14,7 @@ VX_CP = $(RISCV_TOOLCHAIN_PATH)/bin/riscv32-unknown-elf-objcopy
VX_CFLAGS += -march=rv32imf -mabi=ilp32f -O3 -Wstack-usage=1024 -ffreestanding -nostartfiles -fdata-sections -ffunction-sections VX_CFLAGS += -march=rv32imf -mabi=ilp32f -O3 -Wstack-usage=1024 -ffreestanding -nostartfiles -fdata-sections -ffunction-sections
VX_CFLAGS += -I$(VORTEX_RT_PATH)/include -I$(VORTEX_RT_PATH)/../hw VX_CFLAGS += -I$(VORTEX_RT_PATH)/include -I$(VORTEX_RT_PATH)/../hw
VX_LDFLAGS += -Wl,-Bstatic,-T,$(VORTEX_RT_PATH)/linker/vx_link.ld -Wl,--gc-sections $(VORTEX_RT_PATH)/libvortexrt.a VX_LDFLAGS += -Wl,-Bstatic,-T,$(VORTEX_RT_PATH)/linker/vx_link$(XLEN).ld -Wl,--gc-sections $(VORTEX_RT_PATH)/libvortexrt.a
VX_SRCS = kernel.c VX_SRCS = kernel.c

View File

@@ -1,3 +1,5 @@
XLEN ?= 32
RISCV_TOOLCHAIN_PATH ?= /opt/riscv-gnu-toolchain RISCV_TOOLCHAIN_PATH ?= /opt/riscv-gnu-toolchain
VORTEX_DRV_PATH ?= $(realpath ../../../driver) VORTEX_DRV_PATH ?= $(realpath ../../../driver)
VORTEX_RT_PATH ?= $(realpath ../../../runtime) VORTEX_RT_PATH ?= $(realpath ../../../runtime)
@@ -12,7 +14,7 @@ VX_CP = $(RISCV_TOOLCHAIN_PATH)/bin/riscv32-unknown-elf-objcopy
VX_CFLAGS += -march=rv32imf -mabi=ilp32f -O3 -Wstack-usage=1024 -ffreestanding -nostartfiles -fdata-sections -ffunction-sections VX_CFLAGS += -march=rv32imf -mabi=ilp32f -O3 -Wstack-usage=1024 -ffreestanding -nostartfiles -fdata-sections -ffunction-sections
VX_CFLAGS += -I$(VORTEX_RT_PATH)/include -I$(VORTEX_RT_PATH)/../hw VX_CFLAGS += -I$(VORTEX_RT_PATH)/include -I$(VORTEX_RT_PATH)/../hw
VX_LDFLAGS += -Wl,-Bstatic,-T,$(VORTEX_RT_PATH)/linker/vx_link.ld -Wl,--gc-sections $(VORTEX_RT_PATH)/libvortexrt.a VX_LDFLAGS += -Wl,-Bstatic,-T,$(VORTEX_RT_PATH)/linker/vx_link$(XLEN).ld -Wl,--gc-sections $(VORTEX_RT_PATH)/libvortexrt.a
VX_SRCS = kernel.c VX_SRCS = kernel.c

View File

@@ -1,3 +1,5 @@
XLEN ?= 32
RISCV_TOOLCHAIN_PATH ?= /opt/riscv-gnu-toolchain RISCV_TOOLCHAIN_PATH ?= /opt/riscv-gnu-toolchain
VORTEX_DRV_PATH ?= $(realpath ../../../driver) VORTEX_DRV_PATH ?= $(realpath ../../../driver)
VORTEX_RT_PATH ?= $(realpath ../../../runtime) VORTEX_RT_PATH ?= $(realpath ../../../runtime)
@@ -12,7 +14,7 @@ VX_CP = $(RISCV_TOOLCHAIN_PATH)/bin/riscv32-unknown-elf-objcopy
VX_CFLAGS += -march=rv32imf -mabi=ilp32f -O3 -Wstack-usage=1024 -ffreestanding -nostartfiles -fdata-sections -ffunction-sections VX_CFLAGS += -march=rv32imf -mabi=ilp32f -O3 -Wstack-usage=1024 -ffreestanding -nostartfiles -fdata-sections -ffunction-sections
VX_CFLAGS += -I$(VORTEX_RT_PATH)/include -I$(VORTEX_RT_PATH)/../hw VX_CFLAGS += -I$(VORTEX_RT_PATH)/include -I$(VORTEX_RT_PATH)/../hw
VX_LDFLAGS += -Wl,-Bstatic,-T,$(VORTEX_RT_PATH)/linker/vx_link.ld -Wl,--gc-sections $(VORTEX_RT_PATH)/libvortexrt.a VX_LDFLAGS += -Wl,-Bstatic,-T,$(VORTEX_RT_PATH)/linker/vx_link$(XLEN).ld -Wl,--gc-sections $(VORTEX_RT_PATH)/libvortexrt.a
VX_SRCS = kernel.c VX_SRCS = kernel.c

View File

@@ -1,3 +1,5 @@
XLEN ?= 32
RISCV_TOOLCHAIN_PATH ?= /opt/riscv-gnu-toolchain RISCV_TOOLCHAIN_PATH ?= /opt/riscv-gnu-toolchain
VORTEX_DRV_PATH ?= $(realpath ../../../driver) VORTEX_DRV_PATH ?= $(realpath ../../../driver)
VORTEX_RT_PATH ?= $(realpath ../../../runtime) VORTEX_RT_PATH ?= $(realpath ../../../runtime)
@@ -12,7 +14,7 @@ VX_CP = $(RISCV_TOOLCHAIN_PATH)/bin/riscv32-unknown-elf-objcopy
VX_CFLAGS += -march=rv32imf -mabi=ilp32f -O3 -Wstack-usage=1024 -ffreestanding -nostartfiles -fdata-sections -ffunction-sections VX_CFLAGS += -march=rv32imf -mabi=ilp32f -O3 -Wstack-usage=1024 -ffreestanding -nostartfiles -fdata-sections -ffunction-sections
VX_CFLAGS += -DSM_ENABLE=0 -I$(VORTEX_RT_PATH)/include -I$(VORTEX_RT_PATH)/../hw VX_CFLAGS += -DSM_ENABLE=0 -I$(VORTEX_RT_PATH)/include -I$(VORTEX_RT_PATH)/../hw
VX_LDFLAGS += -Wl,-Bstatic,-T,$(VORTEX_RT_PATH)/linker/vx_link.ld -Wl,--gc-sections,--defsym=__stack_top=0xfefff000 VX_LDFLAGS += -Wl,-Bstatic,-T,$(VORTEX_RT_PATH)/linker/vx_link$(XLEN).ld -Wl,--gc-sections,--defsym=__stack_top=0xfefff000
VX_RUNTIME = $(VORTEX_RT_PATH)/src/vx_start.S $(VORTEX_RT_PATH)/src/vx_perf.c VX_RUNTIME = $(VORTEX_RT_PATH)/src/vx_start.S $(VORTEX_RT_PATH)/src/vx_perf.c

View File

@@ -1,3 +1,5 @@
XLEN ?= 32
RISCV_TOOLCHAIN_PATH ?= /opt/riscv-gnu-toolchain RISCV_TOOLCHAIN_PATH ?= /opt/riscv-gnu-toolchain
VORTEX_DRV_PATH ?= $(realpath ../../../driver) VORTEX_DRV_PATH ?= $(realpath ../../../driver)
VORTEX_RT_PATH ?= $(realpath ../../../runtime) VORTEX_RT_PATH ?= $(realpath ../../../runtime)
@@ -12,7 +14,7 @@ VX_CP = $(RISCV_TOOLCHAIN_PATH)/bin/riscv32-unknown-elf-objcopy
VX_CFLAGS += -march=rv32imf -mabi=ilp32f -O3 -Wstack-usage=1024 -ffreestanding -nostartfiles -fdata-sections -ffunction-sections VX_CFLAGS += -march=rv32imf -mabi=ilp32f -O3 -Wstack-usage=1024 -ffreestanding -nostartfiles -fdata-sections -ffunction-sections
VX_CFLAGS += -I$(VORTEX_RT_PATH)/include -I$(VORTEX_RT_PATH)/../hw VX_CFLAGS += -I$(VORTEX_RT_PATH)/include -I$(VORTEX_RT_PATH)/../hw
VX_LDFLAGS += -Wl,-Bstatic,-T,$(VORTEX_RT_PATH)/linker/vx_link.ld -Wl,--gc-sections $(VORTEX_RT_PATH)/libvortexrt.a VX_LDFLAGS += -Wl,-Bstatic,-T,$(VORTEX_RT_PATH)/linker/vx_link$(XLEN).ld -Wl,--gc-sections $(VORTEX_RT_PATH)/libvortexrt.a
VX_SRCS = kernel.c VX_SRCS = kernel.c

View File

@@ -1,3 +1,5 @@
XLEN ?= 32
RISCV_TOOLCHAIN_PATH ?= /opt/riscv-gnu-toolchain RISCV_TOOLCHAIN_PATH ?= /opt/riscv-gnu-toolchain
VORTEX_DRV_PATH ?= $(realpath ../../../driver) VORTEX_DRV_PATH ?= $(realpath ../../../driver)
VORTEX_RT_PATH ?= $(realpath ../../../runtime) VORTEX_RT_PATH ?= $(realpath ../../../runtime)
@@ -12,7 +14,7 @@ VX_CP = $(RISCV_TOOLCHAIN_PATH)/bin/riscv32-unknown-elf-objcopy
VX_CFLAGS += -march=rv32imf -mabi=ilp32f -O3 -Wstack-usage=1024 -ffreestanding -nostartfiles -fdata-sections -ffunction-sections VX_CFLAGS += -march=rv32imf -mabi=ilp32f -O3 -Wstack-usage=1024 -ffreestanding -nostartfiles -fdata-sections -ffunction-sections
VX_CFLAGS += -I$(VORTEX_RT_PATH)/include -I$(VORTEX_RT_PATH)/../hw VX_CFLAGS += -I$(VORTEX_RT_PATH)/include -I$(VORTEX_RT_PATH)/../hw
VX_LDFLAGS += -Wl,-Bstatic,-T,$(VORTEX_RT_PATH)/linker/vx_link.ld -Wl,--gc-sections $(VORTEX_RT_PATH)/libvortexrt.a VX_LDFLAGS += -Wl,-Bstatic,-T,$(VORTEX_RT_PATH)/linker/vx_link$(XLEN).ld -Wl,--gc-sections $(VORTEX_RT_PATH)/libvortexrt.a
VX_SRCS = kernel.c VX_SRCS = kernel.c

View File

@@ -1,4 +1,6 @@
XLEN ?= 32
RISCV_TOOLCHAIN_PATH ?= /opt/riscv-gnu-toolchain RISCV_TOOLCHAIN_PATH ?= /opt/riscv-gnu-toolchain
VORTEX_DRV_PATH ?= $(realpath ../../../driver) VORTEX_DRV_PATH ?= $(realpath ../../../driver)
VORTEX_RT_PATH ?= $(realpath ../../../runtime) VORTEX_RT_PATH ?= $(realpath ../../../runtime)
@@ -18,7 +20,7 @@ VX_CFLAGS += -Xclang -target-feature -Xclang +vortex
VX_CFLAGS += --sysroot=${SYSROOT} --gcc-toolchain=${RISCV_TOOLCHAIN_PATH} VX_CFLAGS += --sysroot=${SYSROOT} --gcc-toolchain=${RISCV_TOOLCHAIN_PATH}
VX_CFLAGS += -I${VORTEX_HW_PATH} -I${VORTEX_RT_PATH}/include VX_CFLAGS += -I${VORTEX_HW_PATH} -I${VORTEX_RT_PATH}/include
VX_LDFLAGS += -Wl,-Bstatic,-T${VORTEX_RT_PATH}/linker/vx_link.ld,--gc-sections ${VORTEX_RT_PATH}/libvortexrt.a VX_LDFLAGS += -Wl,-Bstatic,-T${VORTEX_RT_PATH}/linker/vx_link$(XLEN).ld,--gc-sections ${VORTEX_RT_PATH}/libvortexrt.a
VX_DPFLAGS = -arch=riscv32 -mcpu=generic-rv32 -mattr=+m,+f -mattr=+vortex VX_DPFLAGS = -arch=riscv32 -mcpu=generic-rv32 -mattr=+m,+f -mattr=+vortex

View File

@@ -1,3 +1,5 @@
XLEN ?= 32
RISCV_TOOLCHAIN_PATH ?= /opt/riscv-gnu-toolchain RISCV_TOOLCHAIN_PATH ?= /opt/riscv-gnu-toolchain
VORTEX_DRV_PATH ?= $(realpath ../../../driver) VORTEX_DRV_PATH ?= $(realpath ../../../driver)
VORTEX_RT_PATH ?= $(wildcard ../../../runtime) VORTEX_RT_PATH ?= $(wildcard ../../../runtime)
@@ -12,7 +14,7 @@ VX_CP = $(RISCV_TOOLCHAIN_PATH)/bin/riscv32-unknown-elf-objcopy
VX_CFLAGS += -std=c++11 -march=rv32imf -mabi=ilp32f -O3 -Wstack-usage=1024 -ffreestanding -nostartfiles -fdata-sections -ffunction-sections VX_CFLAGS += -std=c++11 -march=rv32imf -mabi=ilp32f -O3 -Wstack-usage=1024 -ffreestanding -nostartfiles -fdata-sections -ffunction-sections
VX_CFLAGS += -DENABLE_SW -I$(VORTEX_RT_PATH)/include -I$(VORTEX_RT_PATH)/../hw -I$(VORTEX_RT_PATH)/../sim/common -I$(VORTEX_RT_PATH)/../third_party VX_CFLAGS += -DENABLE_SW -I$(VORTEX_RT_PATH)/include -I$(VORTEX_RT_PATH)/../hw -I$(VORTEX_RT_PATH)/../sim/common -I$(VORTEX_RT_PATH)/../third_party
VX_LDFLAGS += -Wl,-Bstatic,-T,$(VORTEX_RT_PATH)/linker/vx_link.ld -Wl,--gc-sections $(VORTEX_RT_PATH)/libvortexrt.a VX_LDFLAGS += -Wl,-Bstatic,-T,$(VORTEX_RT_PATH)/linker/vx_link$(XLEN).ld -Wl,--gc-sections $(VORTEX_RT_PATH)/libvortexrt.a
VX_SRCS = kernel.c VX_SRCS = kernel.c

View File

@@ -1,18 +1,50 @@
ALL_TESTS := $(wildcard *.hex) XLEN ?= 32
D_TESTS := $(wildcard *ud-p-*.hex) SIM_DIR=../../../sim
V_TESTS := $(wildcard *-v-*.hex)
EXCLUDED_TESTS := $(V_TESTS) $(D_TESTS) rv32si-p-scall.hex rv32si-p-sbreak.hex rv32mi-p-breakpoint.hex rv32ua-p-amomax_w.hex rv32ua-p-amoxor_w.hex rv32ua-p-amoor_w.hex rv32mi-p-ma_addr.hex rv32mi-p-mcsr.hex rv32ua-p-amoswap_w.hex rv32mi-p-ma_fetch.hex rv32mi-p-csr.hex rv32ua-p-amoadd_w.hex rv32si-p-dirty.hex rv32ui-p-fence_i.hex rv32si-p-csr.hex rv32mi-p-shamt.hex rv32ua-p-amomin_w.hex rv32ua-p-lrsc.hex rv32si-p-wfi.hex rv32ua-p-amomaxu_w.hex rv32si-p-ma_fetch.hex rv32mi-p-illegal.hex rv32uc-p-rvc.hex rv32mi-p-sbreak.hex rv32ua-p-amominu_w.hex rv32ua-p-amoand_w.hex TESTS_32I := $(filter-out rv32ui-p-fence_i.hex, $(wildcard rv32ui-p-*.hex))
TESTS_32M := $(wildcard rv32um-p-*.hex)
TESTS_32F := $(wildcard rv32uf-p-*.hex)
TESTS_32D := $(wildcard rv32ud-p-*.hex)
TESTS := $(filter-out $(EXCLUDED_TESTS), $(ALL_TESTS)) TESTS_64I := $(wildcard rv64ui-p-*.hex)
TESTS_64M := $(wildcard rv64um-p-*.hex)
TESTS_64F := $(wildcard rv64uf-p-*.hex)
TESTS_64D := $(wildcard rv64ud-p-*.hex)
all: all:
run-simx: run-simx-32i:
$(foreach test, $(TESTS), ../../../sim/simx/simx -r -a rv32i -c 1 -i $(test) || exit;) $(foreach test, $(TESTS_32I), $(SIM_DIR)/simx/simx -r -c 1 -i $(test) || exit;)
run-simx-32im:
$(foreach test, $(TESTS_32I) $(TESTS_32M), $(SIM_DIR)/simx/simx -r -c 1 -i $(test) || exit;)
run-simx-32imf:
$(foreach test, $(TESTS_32I) $(TESTS_32M) $(TESTS_32F), $(SIM_DIR)/simx/simx -r -c 1 -i $(test) || exit;)
run-simx-32imfd:
$(foreach test, $(TESTS_32I) $(TESTS_32M) $(TESTS_32F) $(TESTS_32D), $(SIM_DIR)/simx/simx -r -c 1 -i $(test) || exit;)
run-simx-64i:
$(foreach test, $(TESTS_64I), $(SIM_DIR)/simx/simx -r -c 1 -i $(test) || exit;)
run-simx-64im:
$(foreach test, $(TESTS_64I) $(TESTS_64M), $(SIM_DIR)/simx/simx -r -c 1 -i $(test) || exit;)
run-simx-64imf:
$(foreach test, $(TESTS_64I) $(TESTS_64M) $(TESTS_64F), $(SIM_DIR)/simx/simx -r -c 1 -i $(test) || exit;)
run-simx-64imfd:
$(foreach test, $(TESTS_64I) $(TESTS_64M) $(TESTS_64F) $(TESTS_64D), $(SIM_DIR)/simx/simx -r -c 1 -i $(test) || exit;)
run-simx-32: run-simx-32imfd
run-simx-64: run-simx-32imfd run-simx-64imfd
run-simx: run-simx-$(XLEN)
run-rtlsim: run-rtlsim:
$(foreach test, $(TESTS), ../../../sim/rtlsim/rtlsim -r $(test) || exit;) $(foreach test, $(TESTS_32I) $(TESTS_32M) $(TESTS_32F), $(SIM_DIR)/rtlsim/rtlsim -r $(test) || exit;)
clean: clean:

View File

@@ -1,49 +0,0 @@
:0200000480007A
:100000006F00C004732F2034930F8000630AFF0336
:10001000930F90006306FF03930FB0006302FF038A
:10002000170F0000130FCF2063040F0067000F00AD
:10003000732F203463540F006F00400093E19153FD
:10004000171F000023203FFC6FF09FFF732540F136
:1000500063100500970200009382020173905230F2
:10006000735000189702000093820202739052307E
:10007000B70200809382F2FF7390023B9302F0017B
:100080007390023A9702000093828201739052307B
:100090007350203073503030735040309301000063
:1000A00097020000938242F67390523013051000BD
:1000B0001315F501634C05000F00F00F93011000BC
:1000C0009308D005130500007300000093020000A0
:1000D000638E020073905210B7B2000093829210A8
:1000E0007390223073232030E39A62F4735000300F
:1000F00037250000130505807320053097020000A6
:100100009382420173901234732540F173002030C2
:10011000930120007310007AF325007A631EB00E5D
:1001200017060000130606027310267A3705002012
:10013000130545047310157AF325107A6318B5007A
:10014000630E000A9301300003250600930140006E
:1001500037050020130515047310157AF325107A5E
:100160006310B502172600001306C6E97310267A3D
:1001700003260600630406089301500023200600AE
:100180009301600037050020130525047310157ACC
:10019000F325107A6312B5062320C6009301700080
:1001A00003260600631C0604130510007310057A6D
:1001B000F325007A6312B5063705002013051504F0
:1001C0007310157A97260000938606E47390267ABA
:1001D0009301800083A60600638206029301A000BB
:1001E00017260000130606E22320C6009301B00084
:1001F0000326060063140600631030020F00F00FA0
:10020000638001009391110093E111009308D005E0
:1002100013850100730000000F00F00F9301100020
:100220009308D005130500007300000093F211003D
:10023000E39602FC9302300073232034E39062FCC7
:10024000F3221034938242007390123473002030F2
:10025000731000C00000000000000000000000005B
:10026000000000000000000000000000000000008E
:10027000000000000000000000000000000000007E
:1010000000000000000000000000000000000000E0
:1010100000000000000000000000000000000000D0
:1010200000000000000000000000000000000000C0
:1010300000000000000000000000000000000000B0
:081040000000000000000000A8
:1020000000000000000000000000000000000000D0
:040000058000000077
:00000001FF

View File

@@ -1,57 +0,0 @@
:0200000480007A
:100000006F00C004732F2034930F8000630AFF0336
:10001000930F90006306FF03930FB0006302FF038A
:10002000170F0000130F8F2663040F0067000F00E7
:10003000732F203463540F006F00400093E19153FD
:10004000171F000023203FFC6FF09FFF732540F136
:1000500063100500970200009382020173905230F2
:10006000735000189702000093820202739052307E
:10007000B70200809382F2FF7390023B9302F0017B
:100080007390023A9702000093828201739052307B
:100090007350203073503030735040309301000063
:1000A00097020000938242F67390523013051000BD
:1000B0001315F501634C05000F00F00F93011000BC
:1000C0009308D005130500007300000093020000A0
:1000D000638E020073905210B7B2000093829210A8
:1000E0007390223073232030E39A62F4735000300F
:1000F00037250000130505807320053097020000A6
:100100009382420173901234732540F173002030C2
:1001100073D0013473250034930E30009301200016
:10012000631CD513F3F50034930E300093013000B7
:100130006394D51373660234930E2000930140003C
:10014000631CD611F3560134930E600093015000E6
:100150006394D6113725AD0B1305A5DEF3150534D1
:10016000930E2000930160006398D50F372500009F
:100170001305A5DE73350534B72EAD0B938EAEDEB9
:1001800093017000631AD50D37C500001305F5EE15
:1001900073250534B70EAD0B93018000631ED50B9C
:1001A00073250034B7CEAD0B938EFEEE9301900015
:1001B0006314D50B7325103013750502630805020F
:1001C000B765000073A00530530000F073B0053030
:1001D00097250000938505E327A0050003A50500EA
:1001E000930E10009301A0006318D50773251030FB
:1001F000135545011375150063040504B72200006B
:100200009382028073B00230970200009382020151
:1002100073901234730020301305F00F731500C073
:10022000930EF00F9301B0006318D5031305F00F80
:1002300073250030930EF00F9301C000631ED501AB
:100240000F00F00F930110009308D0051305000074
:1002500073000000631030020F00F00F6380010094
:100260009391110093E111009308D00513850100CB
:10027000730000000F00F00F930110009308D005E9
:1002800013050000730000009302900063E6510024
:100290009302B00063F23202F32220341303800091
:1002A000E39C62FA0F00F00F930110009308D00551
:1002B0001305000073000000F32220341303200014
:1002C000E39C62F8F322103493824200739012345C
:1002D00073002030731000C0000000000000000018
:1002E000000000000000000000000000000000000E
:1002F00000000000000000000000000000000000FE
:1010000000000000000000000000000000000000E0
:1010100000000000000000000000000000000000D0
:1010200000000000000000000000000000000000C0
:1010300000000000000000000000000000000000B0
:081040000000000000000000A8
:1020000001000000000000000000000000000000CF
:040000058000000077
:00000001FF

View File

@@ -1,81 +0,0 @@
:0200000480007A
:100000006F00C004732F2034930F8000630AFF0336
:10001000930F90006306FF03930FB0006302FF038A
:10002000170F0000130F0F2E63040F0067000F005F
:10003000732F203463540F006F00400093E19153FD
:10004000171F000023203FFC6FF09FFF732540F136
:1000500063100500970200009382020173905230F2
:10006000735000189702000093820202739052307E
:10007000B70200809382F2FF7390023B9302F0017B
:100080007390023A9702000093828201739052307B
:100090007350203073503030735040309301000063
:1000A00097020000938242F67390523013051000BD
:1000B0001315F501634C05000F00F00F93011000BC
:1000C0009308D005130500007300000093020000A0
:1000D000638E020073905210B7B2000093829210A8
:1000E0007390223073232030E39A62F4735000300F
:1000F00037250000130505807320053097020000A6
:100100009382420173901234732540F173002030C2
:1001100093012000000000006F00400FB722000094
:100120009382028073B00230371300001303038000
:1001300073200330F3230030B3F353006316730EC0
:100140007350413473504130970200009382921BE8
:1001500073945230F322503093F2120063860200FF
:10016000736004306F0000007310543073503130EE
:10017000970200009382820273901234B72200002B
:100180009382028073B002303713000013030380A0
:100190007320033073002030730050100000000003
:1001A0006F00C006730050106F004006730000120D
:1001B000F3220018000000006F00400573000012D9
:1001C0006F00C004F32200186F0040049702000083
:1001D00093820202739012149302001073A0021013
:1001E0009302000273B002107300201000000000A0
:1001F0006F00C001970200009382020173901214F5
:10020000730020106F008000631030020F00F00FA9
:10021000638001009391110093E111009308D005D0
:1002200013850100730000000F00F00F9301100010
:100230009308D005130500007300000013000000B0
:100240001300000013000000130000001300000062
:100250001300000013000000130000001300000052
:100260001300000013000000130000001300000042
:100270001300000013000000130000001300000032
:100280001300000013000000130000001300000022
:100290001300000013000000130000001300000012
:1002A0001300000013000000130000001300000002
:1002B00013000000130000001300000013000000F2
:1002C00013000000130000001300000013000000E2
:1002D00013000000130000001300000013000000D2
:1002E00013000000130000001300000013000000C2
:1002F00013000000130000001300000013000000B2
:100300006F0000046FF05FE66FF05FF06FF01FF0BA
:100310006FF0DFEF6FF09FEF6FF05FEF6FF01FEFA9
:100320006FF0DFEE6FF09FEE6FF05FEE6FF01FEE9D
:100330006FF0DFED6FF09FED6FF05FED6FF01FED91
:1003400013032000F3222034E39262ECF3221034F2
:10035000F3233034638E030003D30200B3C363007E
:1003600003D3220013130301B3C36300E39003EA32
:1003700017030000130343DA638E620417030000BF
:10038000130303E2638E6204170300001303C3E147
:100390006382620417030000130303E263886204AC
:1003A000170300001303C3E1638662021703000012
:1003B000130383E16380620217030000130343E326
:1003C000638C6202170300001303C3E3638C6202B1
:1003D0006FF0DFE393828200739012347300203059
:1003E00037032000732003306FF0DFFE3703100067
:1003F000732003306FF01FFE37034000732003307B
:100400006FF05FFD6FF01FFD731000C00000000073
:1004100000000000000000000000000000000000DC
:1004200000000000000000000000000000000000CC
:1004300000000000000000000000000000000000BC
:1004400000000000000000000000000000000000AC
:10045000000000000000000000000000000000009C
:10046000000000000000000000000000000000008C
:10047000000000000000000000000000000000007C
:08048000000000000000000074
:1010000000000000000000000000000000000000E0
:1010100000000000000000000000000000000000D0
:1010200000000000000000000000000000000000C0
:1010300000000000000000000000000000000000B0
:081040000000000000000000A8
:040000058000000077
:00000001FF

View File

@@ -1,73 +0,0 @@
:0200000480007A
:100000006F00C004732F2034930F8000630AFF0336
:10001000930F90006306FF03930FB0006302FF038A
:10002000170F0000130F8F2A63040F0067000F00E3
:10003000732F203463540F006F00400093E19153FD
:10004000171F000023203FFC6FF09FFF732540F136
:1000500063100500970200009382020173905230F2
:10006000735000189702000093820202739052307E
:10007000B70200809382F2FF7390023B9302F0017B
:100080007390023A9702000093828201739052307B
:100090007350203073503030735040309301000063
:1000A00097020000938242F67390523013051000BD
:1000B0001315F501634C05000F00F00F93011000BC
:1000C0009308D005130500007300000093020000A0
:1000D000638E020073905210B7B2000093829210A8
:1000E0007390223073232030E39A62F4735000300F
:1000F00037250000130505807320053097020000A6
:100100009382420173901234732540F173002030C2
:1001100017240000130404EF93044000930120000F
:10012000970300009383C301130314000313140007
:10013000B7C3FFFF9383C3BC631E731493013000E6
:10014000970300009383C3011303140003531400A7
:10015000B7C300009383C3BC631E731293014000B6
:10016000970300009383C3011303140003231400B7
:10017000B7C3AA999383C3BC631E73109301500045
:10018000970300009383C301130324000323240077
:10019000B7B399889383B3AB631E730E930160006A
:1001A000970300009383C301130334000323340037
:1001B000B7A388779383A39A631E730C930460009C
:1001C000930160019703000093830303130314005A
:1001D000A310040003030400630E030A03033400A6
:1001E000630A030A030314006316030A03032400CB
:1001F0006312030A930170019703000093830303C2
:1002000013035400A32204000303440063040308FF
:10021000030394006300030803035400631C0306F4
:100220000303840063180306930180019703000011
:10023000938303031303A400232504000303940002
:10024000630A03040303E400630603040303A40036
:10025000631203040303D400631E0302930190019D
:1002600097030000938303031303F400A327040000
:100270000303E4006300030203033401630C03007F
:100280000303F40063180300030324016314030051
:10029000631030020F00F00F638001009391110092
:1002A00093E111009308D00513850100730000004D
:1002B0000F00F00F930110009308D0051305000004
:1002C0007300000013000000F3222034E39492FC3A
:1002D000F3223034E39062FC83820200E38C02FA62
:1002E0007390133473002030731000C000000000BE
:1002F00000000000000000000000000000000000FE
:1010000000000000000000000000000000000000E0
:1010100000000000000000000000000000000000D0
:1010200000000000000000000000000000000000C0
:1010300000000000000000000000000000000000B0
:081040000000000000000000A8
:10200000DDCCBBAA998877665544332211EEFFEEEA
:1020100050505050505050505050505050505050C0
:1020200050505050505050505050505050505050B0
:1020300050505050505050505050505050505050A0
:102040005050505050505050505050505050505090
:102050005050505050505050505050505050505080
:102060005050505050505050505050505050505070
:102070005050505050505050505050505050505060
:102080005050505050505050505050505050505050
:102090005050505050505050505050505050505040
:1020A0005050505050505050505050505050505030
:1020B0005050505050505050505050505050505020
:1020C0005050505050505050505050505050505010
:1020D0005050505050505050505050505050505000
:1020E00050505050505050505050505050505050F0
:1020F00050505050505050505050505050505050E0
:10210000505050505050505050505050505050001F
:040000058000000077
:00000001FF

View File

@@ -1,52 +0,0 @@
:0200000480007A
:100000006F00C004732F2034930F8000630AFF0336
:10001000930F90006306FF03930FB0006302FF038A
:10002000170F0000130F0F2263040F0067000F006B
:10003000732F203463540F006F00400093E19153FD
:10004000171F000023203FFC6FF09FFF732540F136
:1000500063100500970200009382020173905230F2
:10006000735000189702000093820202739052307E
:10007000B70200809382F2FF7390023B9302F0017B
:100080007390023A9702000093828201739052307B
:100090007350203073503030735040309301000063
:1000A00097020000938242F67390523013051000BD
:1000B0001315F501634C05000F00F00F93011000BC
:1000C0009308D005130500007300000093020000A0
:1000D000638E020073905210B7B2000093829210A8
:1000E0007390223073232030E39A62F4735000300F
:1000F00037250000130505807320053097020000A6
:100100009382420173901234732540F173002030C2
:100110009301200013030000970200009382C200A5
:100120006783220011A019A06F00800E9301300098
:10013000970200009382C200678312006F00800064
:100140006F00000D930140001303000097020000B0
:100150009382C2006783320011A019A06F00400B88
:100160009301500013030000970200009382C20025
:100170006F03600011A019A06F0080099301600057
:1001800013030000970200009382C2006303000083
:1001900011A019A06F00C007930170006315000043
:1001A0006F00C00009A009A06F00800693018000C5
:1001B000F323103093F3430063880304010073704A
:1001C00012300100F323103093F3430063820304E1
:1001D00097020000938242039382E2FF73901234ED
:1001E00073701230F323103093F34300639E0300C7
:1001F000B72300009383038073A003307300203083
:1002000063020000736012306F004002631030021E
:100210000F00F00F638001009391110093E1110032
:100220009308D00513850100730000000F00F00F44
:10023000930110009308D00513050000730000001F
:10024000130520006380A10213054000638CA10008
:10025000130550006388A100130560006384A100AA
:100260006FF01FFBE31603FA93050000732520349B
:10027000E310B5FAF325103493854500E39AB2F8FC
:1002800073253034630605001305E5FFE31255F8C6
:100290009385C5007390153473002030731000C02F
:1002A000000000000000000000000000000000004E
:1002B000000000000000000000000000000000003E
:1010000000000000000000000000000000000000E0
:1010100000000000000000000000000000000000D0
:1010200000000000000000000000000000000000C0
:1010300000000000000000000000000000000000B0
:081040000000000000000000A8
:040000058000000077
:00000001FF

View File

@@ -1,36 +0,0 @@
:0200000480007A
:100000006F008004732F2034930F80006308FF0378
:10001000930F90006304FF03930FB0006300FF038E
:10002000130F000063040F0067000F00732F2034CC
:1000300063540F006F00400093E19153171F0000BD
:1000400023223FFC6FF09FFF732540F163100500F2
:10005000970200009382020173905230735000188F
:10006000970200009382020273905230B702008020
:100070009382F2FF7390023B9302F0017390023A75
:1000800097020000938282017390523073502030A7
:1000900073503030735040309301000097020000DD
:1000A000938282F673905230130510001315F501F8
:1000B000634C05000F00F00F930110009308D0056A
:1000C000130500007300000093020000638E02001D
:1000D00073905210B7B20000938292107390223046
:1000E00073232030E39A62F4735000303725000008
:1000F00013050580732005309702000093824201AA
:1001000073901234732540F1730020307325103042
:100110001355E501930E1000930120006318D503D9
:10012000732540F1930E0000930130006310D50356
:10013000732530F1732520F1732510F1930200002F
:1001400073A0523073A01234631030020F00F00F0E
:10015000638001009391110093E111009308D00591
:1001600013850100730000000F00F00F93011000D1
:100170009308D0051305000073000000731000C041
:10018000000000000000000000000000000000006F
:10019000000000000000000000000000000000005F
:1001A000000000000000000000000000000000004F
:0C01B00000000000000000000000000043
:1010000000000000000000000000000000000000E0
:1010100000000000000000000000000000000000D0
:1010200000000000000000000000000000000000C0
:1010300000000000000000000000000000000000B0
:081040000000000000000000A8
:040000058000000077
:00000001FF

View File

@@ -1,32 +0,0 @@
:0200000480007A
:100000006F00C004732F2034930F8000630AFF0336
:10001000930F90006306FF03930FB0006302FF038A
:10002000170F0000130F0F1363040F0067000F007A
:10003000732F203463540F006F00400093E19153FD
:10004000171F000023203FFC6FF09FFF732540F136
:1000500063100500970200009382020173905230F2
:10006000735000189702000093820202739052307E
:10007000B70200809382F2FF7390023B9302F0017B
:100080007390023A9702000093828201739052307B
:100090007350203073503030735040309301000063
:1000A00097020000938242F67390523013051000BD
:1000B0001315F501634C05000F00F00F93011000BC
:1000C0009308D005130500007300000093020000A0
:1000D000638E020073905210B7B2000093829210A8
:1000E0007390223073232030E39A62F4735000300F
:1000F00037250000130505807320053097020000A6
:100100009382420173901234732540F173002030C2
:1001100093012000730010006F0080006310300214
:100120000F00F00F638001009391110093E1110023
:100130009308D00513850100730000000F00F00F35
:10014000930110009308D005130500007300000010
:1001500013033000F3222034E39462FC1703000001
:10016000130383FBF3221034E39C62FA6FF01FFD4C
:10017000731000C00000000000000000000000003C
:1010000000000000000000000000000000000000E0
:1010100000000000000000000000000000000000D0
:1010200000000000000000000000000000000000C0
:1010300000000000000000000000000000000000B0
:081040000000000000000000A8
:040000058000000077
:00000001FF

View File

@@ -1,36 +0,0 @@
:0200000480007A
:100000006F00C004732F2034930F8000630AFF0336
:10001000930F90006306FF03930FB0006302FF038A
:10002000170F0000130F0F1763040F0067000F0076
:10003000732F203463540F006F00400093E19153FD
:10004000171F000023203FFC6FF09FFF732540F136
:1000500063100500970200009382020173905230F2
:10006000735000189702000093820202739052307E
:10007000B70200809382F2FF7390023B9302F0017B
:100080007390023A9702000093828201739052307B
:100090007350203073503030735040309301000063
:1000A00097020000938242F67390523013051000BD
:1000B0001315F501634C05000F00F00F93011000BC
:1000C0009308D005130500007300000093020000A0
:1000D000638E020073905210B7B2000093829210A8
:1000E0007390223073232030E39A62F4735000300F
:1000F00037250000130505807320053097020000A6
:100100009382420173901234732540F173002030C2
:100110009301200013038000B72200009382028025
:1001200073B00230F3230030B3F272006384020034
:100130001303B000B72200009382028073B0023034
:1001400097020000938202017390123473002030F2
:1001500093011000730000006F00800063103002F4
:100160000F00F00F638001009391110093E11100E3
:100170009308D00513850100730000000F00F00FF5
:10018000930110009308D0051305000073000000D0
:10019000F3222034E39662FC970300009383C3FBB1
:1001A000F3221034E39E72FA6FF05FFD731000C00B
:1001B000000000000000000000000000000000003F
:1010000000000000000000000000000000000000E0
:1010100000000000000000000000000000000000D0
:1010200000000000000000000000000000000000C0
:1010300000000000000000000000000000000000B0
:081040000000000000000000A8
:040000058000000077
:00000001FF

View File

@@ -1,36 +0,0 @@
:0200000480007A
:100000006F00C004732F2034930F8000630AFF0336
:10001000930F90006306FF03930FB0006302FF038A
:10002000170F0000130F8F1463040F0067000F00F9
:10003000732F203463540F006F00400093E19153FD
:10004000171F000023203FFC6FF09FFF732540F136
:1000500063100500970200009382020173905230F2
:10006000735000189702000093820202739052307E
:10007000B70200809382F2FF7390023B9302F0017B
:100080007390023A9702000093828201739052307B
:100090007350203073503030735040309301000063
:1000A00097020000938242F67390523013051000BD
:1000B0001315F501634C05000F00F00F93011000BC
:1000C0009308D005130500007300000093020000A0
:1000D000638E020073905210B7B2000093829210A8
:1000E0007390223073232030E39A62F4735000300F
:1000F00037250000130505807320053097020000A6
:100100009382420173901234732540F173002030C2
:100110001305100013150501B70E0100930120000F
:10012000631CD50113150502930E100093013000D6
:100130006314D001631030020F00F00F63800100E0
:100140009391110093E111009308D00513850100EC
:10015000730000000F00F00F930110009308D0050A
:10016000130500007300000093022000E39651FC89
:10017000F322203413032000E39062FC6FF09FFD14
:10018000731000C00000000000000000000000002C
:10019000000000000000000000000000000000005F
:1001A000000000000000000000000000000000004F
:1001B000000000000000000000000000000000003F
:1010000000000000000000000000000000000000E0
:1010100000000000000000000000000000000000D0
:1010200000000000000000000000000000000000C0
:1010300000000000000000000000000000000000B0
:081040000000000000000000A8
:040000058000000077
:00000001FF

View File

@@ -1,49 +0,0 @@
:0200000480007A
:100000006F008004732F2034930F80006308FF0378
:10001000930F90006304FF03930FB0006300FF038E
:10002000130F000063040F0067000F00732F2034CC
:1000300063540F006F00400093E19153171F0000BD
:1000400023223FFC6FF09FFF732540F163100500F2
:10005000970200009382020173905230735000188F
:10006000970200009382020273905230B702008020
:100070009382F2FF7390023B9302F0017390023A75
:1000800097020000938282017390523073502030A7
:1000900073503030735040309301000097020000DD
:1000A000938282F673905230130510001315F501F8
:1000B000634C05000F00F00F930110009308D0056A
:1000C000130500007300000097020000938242169F
:1000D000638E020073905210B7B2000093829210A8
:1000E0007390223073232030E39862F47350003011
:1000F0003715000013050580732005301305200215
:1001000073203530970200009382420173901234BD
:10011000732540F17300203073D00114732500144F
:10012000930E300093012000631AD50DF3F50014EF
:10013000930E3000930130006392D50D7366021464
:10014000930E200093014000631AD60BF35601145E
:10015000930E6000930150006392D60B3725AD0BD0
:100160001305A5DEF3150514930E2000930160001E
:100170006396D509372500001305A5DE73350514F0
:10018000B72EAD0B938EAEDE930170006318D507CA
:1001900037C500001305F5EE73250514B70EAD0B3A
:1001A00093018000631CD50573250014B7CEAD0BF9
:1001B000938EFEEE930190006312D505930200101A
:1001C00073B0021097020000938202017390121420
:1001D0007300201013000000930E00009301C00074
:1001E000631ED0010F00F00F930110009308D0059B
:1001F0001305000073000000631030020F00F00FC1
:10020000638001009391110093E111009308D005E0
:1002100013850100730000000F00F00F9301100020
:100220009308D005130500007300000093029000AE
:1002300063E651009302B00063F23202F32220140D
:1002400013038000E39C62FA0F00F00F930110008B
:100250009308D0051305000073000000F32220145A
:1002600013032000E39C62F8F322101493824200EF
:100270007390121473002010731000C0000000006F
:1010000000000000000000000000000000000000E0
:1010100000000000000000000000000000000000D0
:1010200000000000000000000000000000000000C0
:1010300000000000000000000000000000000000B0
:081040000000000000000000A8
:1020000001000000000000000000000000000000CF
:040000058000000077
:00000001FF

View File

@@ -1,53 +0,0 @@
:0200000480007A
:100000006F00C004732F2034930F8000630AFF0336
:10001000930F90006306FF03930FB0006302FF038A
:10002000170F0000130FCF1E63040F0067000F00AF
:10003000732F203463540F006F00400093E19153FD
:10004000171F000023203FFC6FF09FFF732540F136
:1000500063100500970200009382020173905230F2
:10006000735000189702000093820202739052307E
:10007000B70200809382F2FF7390023B9302F0017B
:100080007390023A9702000093828201739052307B
:100090007350203073503030735040309301000063
:1000A00097020000938242F67390523013051000BD
:1000B0001315F501634C05000F00F00F93011000BC
:1000C0009308D005130500007300000093020000A0
:1000D000638E020073905210B7B2000093829210A8
:1000E0007390223073232030E39A62F4735000300F
:1000F00037250000130505807320053097020000A6
:100100009382420173901234732540F173002030C2
:1001100037050080972500009385C5EE93D5C5006F
:10012000B3E5A5007390051873000012B71502001F
:100130009385058073A00530930120009303100080
:1001400017250080232475EC93013000B7150400B7
:100150009385058073A005309722008083A202EB6F
:10016000639C021017250080232275EA97220080E5
:1001700083A2C2E963927210B702020073B0023028
:100180009722000083A202E81305000CB3F2A2003C
:100190006394A20EB702020073A0023093014000E4
:1001A00017250080032505E613650540972200808A
:1001B00023AAA2E4730000129722008023A4A2E4E1
:1001C0006F00800B0F00F00F930110009308D00513
:1001D0001305000073000000631030020F00F00FE1
:1001E000638001009391110093E111009308D00501
:1001F00013850100730000000F00F00F9301100041
:100200009308D0051305000073000000F32220348A
:10021000938212FF6392020613032000639261022D
:100220009722000083A202DE13F302086316030480
:10023000F322103493824200739012347300203002
:1002400013033000639461029722000083A282DBD3
:1002500013F302086312030293E20208172300005B
:10026000232253DA7300001273002030130340007E
:10027000639461006FF05FF80F00F00F638001007E
:100280009391110093E111009308D00513850100AB
:1002900073000000731000C00000000000000000A8
:1002A000000000000000000000000000000000004E
:1002B000000000000000000000000000000000003E
:1010000000000000000000000000000000000000E0
:1010100000000000000000000000000000000000D0
:1010200000000000000000000000000000000000C0
:1010300000000000000000000000000000000000B0
:081040000000000000000000A8
:102000005F00002000000000000000000000000051
:040000058000000077
:00000001FF

View File

@@ -1,48 +0,0 @@
:0200000480007A
:100000006F008004732F2034930F80006308FF0378
:10001000930F90006304FF03930FB0006300FF038E
:10002000130F000063040F0067000F00732F2034CC
:1000300063540F006F00400093E19153171F0000BD
:1000400023223FFC6FF09FFF732540F163100500F2
:10005000970200009382020173905230735000188F
:10006000970200009382020273905230B702008020
:100070009382F2FF7390023B9302F0017390023A75
:1000800097020000938282017390523073502030A7
:1000900073503030735040309301000097020000DD
:1000A000938282F673905230130510001315F501F8
:1000B000634C05000F00F00F930110009308D0056A
:1000C00013050000730000009702000093824212A3
:1000D000638E020073905210B7B2000093829210A8
:1000E0007390223073232030E39862F47350003011
:1000F0003715000013050580732005301305200215
:1001000073203530970200009382420173901234BD
:10011000732540F173002030930120001303000089
:10012000970200009382C2006783220011A019A0E9
:100130006F00C00893013000970200009382C20054
:10014000678312006F0080006F004007930140003A
:1001500013030000970200009382C20067833200FD
:1001600011A019A06F008005930150001303000037
:10017000970200009382C2006F03600011A019A0D3
:100180006F00C0039301600013030000970200009A
:100190009382C2006303000011A019A06F00000247
:1001A00093017000631500006F00C00009A009A052
:1001B0006F00C0006F004002631030020F00F00FAC
:1001C000638001009391110093E111009308D00521
:1001D00013850100730000000F00F00F9301100061
:1001E0009308D005130500007300000013052000DC
:1001F0006380A10213054000638CA1001305500029
:100200006388A100130560006384A1006FF01FFBE9
:10021000E31603FA9305000073252014E310B5FAE2
:10022000F325101493854500E39AB2F87325301432
:10023000630605001305E5FFE31255F89385C50035
:100240007390151473002010731000C0000000009C
:10025000000000000000000000000000000000009E
:10026000000000000000000000000000000000008E
:10027000000000000000000000000000000000007E
:1010000000000000000000000000000000000000E0
:1010100000000000000000000000000000000000D0
:1010200000000000000000000000000000000000C0
:1010300000000000000000000000000000000000B0
:081040000000000000000000A8
:040000058000000077
:00000001FF

View File

@@ -1,32 +0,0 @@
:0200000480007A
:100000006F008004732F2034930F80006308FF0378
:10001000930F90006304FF03930FB0006300FF038E
:10002000130F000063040F0067000F00732F2034CC
:1000300063540F006F00400093E19153171F0000BD
:1000400023223FFC6FF09FFF732540F163100500F2
:10005000970200009382020173905230735000188F
:10006000970200009382020273905230B702008020
:100070009382F2FF7390023B9302F0017390023A75
:1000800097020000938282017390523073502030A7
:1000900073503030735040309301000097020000DD
:1000A000938282F673905230130510001315F501F8
:1000B000634C05000F00F00F930110009308D0056A
:1000C00013050000730000009702000093820209EC
:1000D000638E020073905210B7B2000093829210A8
:1000E0007390223073232030E39862F47350003011
:1000F0003715000013050580732005301305200215
:1001000073203530970200009382420173901234BD
:10011000732540F17300203093012000730010001C
:100120006F008000631030020F00F00F6380010049
:100130009391110093E111009308D00513850100FC
:10014000730000000F00F00F930110009308D0051A
:10015000130500007300000013033000F322201485
:10016000E39462FC17030000130383FBF3221014D3
:10017000E39C62FA6FF01FFD731000C000000000E6
:1010000000000000000000000000000000000000E0
:1010100000000000000000000000000000000000D0
:1010200000000000000000000000000000000000C0
:1010300000000000000000000000000000000000B0
:081040000000000000000000A8
:040000058000000077
:00000001FF

View File

@@ -1,36 +0,0 @@
:0200000480007A
:100000006F008004732F2034930F80006308FF0378
:10001000930F90006304FF03930FB0006300FF038E
:10002000130F000063040F0067000F00732F2034CC
:1000300063540F006F00400093E19153171F0000BD
:1000400023223FFC6FF09FFF732540F163100500F2
:10005000970200009382020173905230735000188F
:10006000970200009382020273905230B702008020
:100070009382F2FF7390023B9302F0017390023A75
:1000800097020000938282017390523073502030A7
:1000900073503030735040309301000097020000DD
:1000A000938282F673905230130510001315F501F8
:1000B000634C05000F00F00F930110009308D0056A
:1000C0001305000073000000970200009382020BEA
:1000D000638E020073905210B7B2000093829210A8
:1000E0007390223073232030E39862F47350003011
:1000F0003715000013050580732005301305200215
:1001000073203530970200009382420173901234BD
:10011000732540F173002030930120001303800009
:100120009302001073B00210970200009382020144
:1001300073901214730020109301100073000000DC
:100140006F008000631030020F00F00F6380010029
:100150009391110093E111009308D00513850100DC
:10016000730000000F00F00F930110009308D005FA
:100170001305000073000000F3222014E39662FCD4
:10018000970300009383C3FBF3221014E39E72FADB
:100190006FF05FFD731000C0000000000000000061
:1001A000000000000000000000000000000000004F
:1001B000000000000000000000000000000000003F
:1010000000000000000000000000000000000000E0
:1010100000000000000000000000000000000000D0
:1010200000000000000000000000000000000000C0
:1010300000000000000000000000000000000000B0
:081040000000000000000000A8
:040000058000000077
:00000001FF

View File

@@ -1,32 +0,0 @@
:0200000480007A
:100000006F008004732F2034930F80006308FF0378
:10001000930F90006304FF03930FB0006300FF038E
:10002000130F000063040F0067000F00732F2034CC
:1000300063540F006F00400093E19153171F0000BD
:1000400023223FFC6FF09FFF732540F163100500F2
:10005000970200009382020173905230735000188F
:10006000970200009382020273905230B702008020
:100070009382F2FF7390023B9302F0017390023A75
:1000800097020000938282017390523073502030A7
:1000900073503030735040309301000097020000DD
:1000A000938282F673905230130510001315F501F8
:1000B000634C05000F00F00F930110009308D0056A
:1000C000130500007300000093020000638E02001D
:1000D00073905210B7B20000938292107390223046
:1000E00073232030E39A62F4735000303715000018
:1000F0001305058073200530130520027320353069
:10010000970200009382420173901234732540F1EC
:1001100073002030737001107360411073604114DC
:10012000730050100F00F00F930110009308D005DA
:100130001305000073000000631030020F00F00F81
:10014000638001009391110093E111009308D005A1
:1001500013850100730000000F00F00F93011000E1
:100160009308D0051305000073000000731000C051
:0C01700000000000000000000000000083
:1010000000000000000000000000000000000000E0
:1010100000000000000000000000000000000000D0
:1010200000000000000000000000000000000000C0
:1010300000000000000000000000000000000000B0
:081040000000000000000000A8
:040000058000000077
:00000001FF

View File

@@ -1,36 +0,0 @@
:0200000480007A
:100000006F008004732F2034930F80006308FF0378
:10001000930F90006304FF03930FB0006300FF038E
:10002000130F000063040F0067000F00732F2034CC
:1000300063540F006F00400093E19153171F0000BD
:1000400023223FFC6FF09FFF732540F163100500F2
:10005000970200009382020173905230735000188F
:10006000970200009382020273905230B702008020
:100070009382F2FF7390023B9302F0017390023A75
:1000800097020000938282017390523073502030A7
:1000900073503030735040309301000097020000DD
:1000A000938282F673905230130510001315F501F8
:1000B000634C05000F00F00F930110009308D0056A
:1000C000130500007300000093020000638E02001D
:1000D00073905210B7B20000938292107390223046
:1000E00073232030E39A62F47350003097020000CB
:1000F0009382420173901234732540F173002030D3
:10010000370500809305008097260000938686EFD0
:1001100023A0A6002FA7B600B70E008093012000F1
:100120006312D70583A70600B70E0080938E0E805A
:10013000930130006398D703B70500802FA7B6005E
:10014000B70E0080938E0E8093014000631CD70190
:1001500083A70600930E0080930150006394D7019B
:10016000631030020F00F00F6380010093911100C3
:1001700093E111009308D00513850100730000007E
:100180000F00F00F930110009308D0051305000035
:1001900073000000731000C00000000000000000A9
:1001A000000000000000000000000000000000004F
:0C01B00000000000000000000000000043
:1010000000000000000000000000000000000000E0
:1010100000000000000000000000000000000000D0
:1010200000000000000000000000000000000000C0
:1010300000000000000000000000000000000000B0
:081040000000000000000000A8
:040000058000000077
:00000001FF

View File

@@ -1,36 +0,0 @@
:0200000480007A
:100000006F008004732F2034930F80006308FF0378
:10001000930F90006304FF03930FB0006300FF038E
:10002000130F000063040F0067000F00732F2034CC
:1000300063540F006F00400093E19153171F0000BD
:1000400023223FFC6FF09FFF732540F163100500F2
:10005000970200009382020173905230735000188F
:10006000970200009382020273905230B702008020
:100070009382F2FF7390023B9302F0017390023A75
:1000800097020000938282017390523073502030A7
:1000900073503030735040309301000097020000DD
:1000A000938282F673905230130510001315F501F8
:1000B000634C05000F00F00F930110009308D0056A
:1000C000130500007300000093020000638E02001D
:1000D00073905210B7B20000938292107390223046
:1000E00073232030E39A62F47350003097020000CB
:1000F0009382420173901234732540F173002030D3
:10010000370500809305008097260000938686EFD0
:1001100023A0A6002FA7B660B70E00809301200091
:10012000631ED70383A70600B70E0080930130003B
:100130006396D703B70500802FA7B660B70E00807F
:1001400093014000631CD70183A70600B70E00800F
:10015000930150006394D701631030020F00F00F39
:10016000638001009391110093E111009308D00581
:1001700013850100730000000F00F00F93011000C1
:100180009308D0051305000073000000731000C031
:10019000000000000000000000000000000000005F
:1001A000000000000000000000000000000000004F
:0C01B00000000000000000000000000043
:1010000000000000000000000000000000000000E0
:1010100000000000000000000000000000000000D0
:1010200000000000000000000000000000000000C0
:1010300000000000000000000000000000000000B0
:081040000000000000000000A8
:040000058000000077
:00000001FF

View File

@@ -1,36 +0,0 @@
:0200000480007A
:100000006F008004732F2034930F80006308FF0378
:10001000930F90006304FF03930FB0006300FF038E
:10002000130F000063040F0067000F00732F2034CC
:1000300063540F006F00400093E19153171F0000BD
:1000400023223FFC6FF09FFF732540F163100500F2
:10005000970200009382020173905230735000188F
:10006000970200009382020273905230B702008020
:100070009382F2FF7390023B9302F0017390023A75
:1000800097020000938282017390523073502030A7
:1000900073503030735040309301000097020000DD
:1000A000938282F673905230130510001315F501F8
:1000B000634C05000F00F00F930110009308D0056A
:1000C000130500007300000093020000638E02001D
:1000D00073905210B7B20000938292107390223046
:1000E00073232030E39A62F47350003097020000CB
:1000F0009382420173901234732540F173002030D3
:10010000370500809305008097260000938686EFD0
:1001100023A0A6002FA7B6A0B70E00809301200051
:100120006310D70583A70600930E0080930130006B
:100130006398D7039305100023A006002FA7B6A04D
:10014000930E000093014000631CD70183A70600B3
:10015000930E1000930150006394D7016310300296
:100160000F00F00F638001009391110093E11100E3
:100170009308D00513850100730000000F00F00FF5
:10018000930110009308D0051305000073000000D0
:10019000731000C00000000000000000000000001C
:1001A000000000000000000000000000000000004F
:0C01B00000000000000000000000000043
:1010000000000000000000000000000000000000E0
:1010100000000000000000000000000000000000D0
:1010200000000000000000000000000000000000C0
:1010300000000000000000000000000000000000B0
:081040000000000000000000A8
:040000058000000077
:00000001FF

View File

@@ -1,36 +0,0 @@
:0200000480007A
:100000006F008004732F2034930F80006308FF0378
:10001000930F90006304FF03930FB0006300FF038E
:10002000130F000063040F0067000F00732F2034CC
:1000300063540F006F00400093E19153171F0000BD
:1000400023223FFC6FF09FFF732540F163100500F2
:10005000970200009382020173905230735000188F
:10006000970200009382020273905230B702008020
:100070009382F2FF7390023B9302F0017390023A75
:1000800097020000938282017390523073502030A7
:1000900073503030735040309301000097020000DD
:1000A000938282F673905230130510001315F501F8
:1000B000634C05000F00F00F930110009308D0056A
:1000C000130500007300000093020000638E02001D
:1000D00073905210B7B20000938292107390223046
:1000E00073232030E39A62F47350003097020000CB
:1000F0009382420173901234732540F173002030D3
:10010000370500809305008097260000938686EFD0
:1001100023A0A6002FA7B6E0B70E00809301200011
:100120006310D70583A70600930E0080930130006B
:100130006398D7039305F0FF23A006002FA7B6E02E
:10014000930E000093014000631CD70183A70600B3
:10015000930EF0FF930150006394D70163103002B7
:100160000F00F00F638001009391110093E11100E3
:100170009308D00513850100730000000F00F00FF5
:10018000930110009308D0051305000073000000D0
:10019000731000C00000000000000000000000001C
:1001A000000000000000000000000000000000004F
:0C01B00000000000000000000000000043
:1010000000000000000000000000000000000000E0
:1010100000000000000000000000000000000000D0
:1010200000000000000000000000000000000000C0
:1010300000000000000000000000000000000000B0
:081040000000000000000000A8
:040000058000000077
:00000001FF

View File

@@ -1,36 +0,0 @@
:0200000480007A
:100000006F008004732F2034930F80006308FF0378
:10001000930F90006304FF03930FB0006300FF038E
:10002000130F000063040F0067000F00732F2034CC
:1000300063540F006F00400093E19153171F0000BD
:1000400023223FFC6FF09FFF732540F163100500F2
:10005000970200009382020173905230735000188F
:10006000970200009382020273905230B702008020
:100070009382F2FF7390023B9302F0017390023A75
:1000800097020000938282017390523073502030A7
:1000900073503030735040309301000097020000DD
:1000A000938282F673905230130510001315F501F8
:1000B000634C05000F00F00F930110009308D0056A
:1000C000130500007300000093020000638E02001D
:1000D00073905210B7B20000938292107390223046
:1000E00073232030E39A62F47350003097020000CB
:1000F0009382420173901234732540F173002030D3
:10010000370500809305008097260000938686EFD0
:1001100023A0A6002FA7B680B70E00809301200071
:100120006310D70583A70600B70E00809301300047
:100130006398D7039305F0FF23A006002FA7B6808E
:10014000930E000093014000631CD70183A70600B3
:10015000930EF0FF930150006394D70163103002B7
:100160000F00F00F638001009391110093E11100E3
:100170009308D00513850100730000000F00F00FF5
:10018000930110009308D0051305000073000000D0
:10019000731000C00000000000000000000000001C
:1001A000000000000000000000000000000000004F
:0C01B00000000000000000000000000043
:1010000000000000000000000000000000000000E0
:1010100000000000000000000000000000000000D0
:1010200000000000000000000000000000000000C0
:1010300000000000000000000000000000000000B0
:081040000000000000000000A8
:040000058000000077
:00000001FF

View File

@@ -1,36 +0,0 @@
:0200000480007A
:100000006F008004732F2034930F80006308FF0378
:10001000930F90006304FF03930FB0006300FF038E
:10002000130F000063040F0067000F00732F2034CC
:1000300063540F006F00400093E19153171F0000BD
:1000400023223FFC6FF09FFF732540F163100500F2
:10005000970200009382020173905230735000188F
:10006000970200009382020273905230B702008020
:100070009382F2FF7390023B9302F0017390023A75
:1000800097020000938282017390523073502030A7
:1000900073503030735040309301000097020000DD
:1000A000938282F673905230130510001315F501F8
:1000B000634C05000F00F00F930110009308D0056A
:1000C000130500007300000093020000638E02001D
:1000D00073905210B7B20000938292107390223046
:1000E00073232030E39A62F47350003097020000CB
:1000F0009382420173901234732540F173002030D3
:10010000370500809305008097260000938686EFD0
:1001100023A0A6002FA7B6C0B70E00809301200031
:100120006310D70583A70600B70E00809301300047
:100130006398D7039305F0FF23A006002FA7B6C04E
:10014000930E000093014000631CD70183A70600B3
:10015000930E0000930150006394D70163103002A6
:100160000F00F00F638001009391110093E11100E3
:100170009308D00513850100730000000F00F00FF5
:10018000930110009308D0051305000073000000D0
:10019000731000C00000000000000000000000001C
:1001A000000000000000000000000000000000004F
:0C01B00000000000000000000000000043
:1010000000000000000000000000000000000000E0
:1010100000000000000000000000000000000000D0
:1010200000000000000000000000000000000000C0
:1010300000000000000000000000000000000000B0
:081040000000000000000000A8
:040000058000000077
:00000001FF

View File

@@ -1,36 +0,0 @@
:0200000480007A
:100000006F008004732F2034930F80006308FF0378
:10001000930F90006304FF03930FB0006300FF038E
:10002000130F000063040F0067000F00732F2034CC
:1000300063540F006F00400093E19153171F0000BD
:1000400023223FFC6FF09FFF732540F163100500F2
:10005000970200009382020173905230735000188F
:10006000970200009382020273905230B702008020
:100070009382F2FF7390023B9302F0017390023A75
:1000800097020000938282017390523073502030A7
:1000900073503030735040309301000097020000DD
:1000A000938282F673905230130510001315F501F8
:1000B000634C05000F00F00F930110009308D0056A
:1000C000130500007300000093020000638E02001D
:1000D00073905210B7B20000938292107390223046
:1000E00073232030E39A62F47350003097020000CB
:1000F0009382420173901234732540F173002030D3
:10010000370500809305008097260000938686EFD0
:1001100023A0A6002FA7B640B70E008093012000B1
:10012000631ED70383A70600930E0080930130005F
:100130006396D703930510002FA7B640930E008057
:1001400093014000631CD70183A70600930E108023
:10015000930150006394D701631030020F00F00F39
:10016000638001009391110093E111009308D00581
:1001700013850100730000000F00F00F93011000C1
:100180009308D0051305000073000000731000C031
:10019000000000000000000000000000000000005F
:1001A000000000000000000000000000000000004F
:0C01B00000000000000000000000000043
:1010000000000000000000000000000000000000E0
:1010100000000000000000000000000000000000D0
:1010200000000000000000000000000000000000C0
:1010300000000000000000000000000000000000B0
:081040000000000000000000A8
:040000058000000077
:00000001FF

View File

@@ -1,36 +0,0 @@
:0200000480007A
:100000006F008004732F2034930F80006308FF0378
:10001000930F90006304FF03930FB0006300FF038E
:10002000130F000063040F0067000F00732F2034CC
:1000300063540F006F00400093E19153171F0000BD
:1000400023223FFC6FF09FFF732540F163100500F2
:10005000970200009382020173905230735000188F
:10006000970200009382020273905230B702008020
:100070009382F2FF7390023B9302F0017390023A75
:1000800097020000938282017390523073502030A7
:1000900073503030735040309301000097020000DD
:1000A000938282F673905230130510001315F501F8
:1000B000634C05000F00F00F930110009308D0056A
:1000C000130500007300000093020000638E02001D
:1000D00073905210B7B20000938292107390223046
:1000E00073232030E39A62F47350003097020000CB
:1000F0009382420173901234732540F173002030D3
:10010000370500809305008097260000938686EFD0
:1001100023A0A6002FA7B608B70E008093012000E9
:10012000631ED70383A70600930E0080930130005F
:100130006396D703B70500802FA7B608930E0080FB
:1001400093014000631CD70183A70600B70E00800F
:10015000930150006394D701631030020F00F00F39
:10016000638001009391110093E111009308D00581
:1001700013850100730000000F00F00F93011000C1
:100180009308D0051305000073000000731000C031
:10019000000000000000000000000000000000005F
:1001A000000000000000000000000000000000004F
:0C01B00000000000000000000000000043
:1010000000000000000000000000000000000000E0
:1010100000000000000000000000000000000000D0
:1010200000000000000000000000000000000000C0
:1010300000000000000000000000000000000000B0
:081040000000000000000000A8
:040000058000000077
:00000001FF

View File

@@ -1,36 +0,0 @@
:0200000480007A
:100000006F008004732F2034930F80006308FF0378
:10001000930F90006304FF03930FB0006300FF038E
:10002000130F000063040F0067000F00732F2034CC
:1000300063540F006F00400093E19153171F0000BD
:1000400023223FFC6FF09FFF732540F163100500F2
:10005000970200009382020173905230735000188F
:10006000970200009382020273905230B702008020
:100070009382F2FF7390023B9302F0017390023A75
:1000800097020000938282017390523073502030A7
:1000900073503030735040309301000097020000DD
:1000A000938282F673905230130510001315F501F8
:1000B000634C05000F00F00F930110009308D0056A
:1000C000130500007300000093020000638E02001D
:1000D00073905210B7B20000938292107390223046
:1000E00073232030E39A62F47350003097020000CB
:1000F0009382420173901234732540F173002030D3
:10010000370500809305008097260000938686EFD0
:1001100023A0A6002FA7B620B70E008093012000D1
:100120006316D70583A70600B70E0080938E0E8056
:1001300093013000639CD703B70500C09385150079
:100140002FA7B620B70E0080938E0E80930140003B
:10015000631ED70183A70600B70E00C0938E1E80D2
:10016000930150006394D701631030020F00F00F29
:10017000638001009391110093E111009308D00571
:1001800013850100730000000F00F00F93011000B1
:100190009308D0051305000073000000731000C021
:1001A000000000000000000000000000000000004F
:0C01B00000000000000000000000000043
:1010000000000000000000000000000000000000E0
:1010100000000000000000000000000000000000D0
:1010200000000000000000000000000000000000C0
:1010300000000000000000000000000000000000B0
:081040000000000000000000A8
:040000058000000077
:00000001FF

View File

@@ -1,109 +0,0 @@
:0200000480007A
:100000006F008004732F2034930F80006308FF0378
:10001000930F90006304FF03930FB0006300FF038E
:10002000130F000063040F0067000F00732F2034CC
:1000300063540F006F00400093E19153171F0000BD
:1000400023223FFC6FF09FFF732540F163100500F2
:10005000970200009382020173905230735000188F
:10006000970200009382020273905230B702008020
:100070009382F2FF7390023B9302F0017390023A75
:1000800097020000938282017390523073502030A7
:1000900073503030735040309301000097020000DD
:1000A000938282F673905230130510001315F501F8
:1000B000634C05000F00F00F930110009308D0056A
:1000C000130500007300000093020000638E02001D
:1000D00073905210B7B20000938292107390223046
:1000E00073232030E39A62F47350003097020000CB
:1000F0009382420173901234732540F173002030D3
:1001000017250000130505F0930510002F26B500F4
:1001100093061000E37ED6FE83250500E3EED5FEB0
:1001200017250000130585EEB7C7ADDE9387F7EE00
:100130002F27F518930E1000930120006316D70D9A
:1001400017270000032787EC930E0000930130006F
:10015000631CD70B17250000130545EB97250000FE
:100160009385052BAFA505102F27B518930E10000A
:1001700093014000631AD70917250000130505E90C
:1001800093050040130616002F2705103307C700FC
:100190002F27E518E31A07FE9385F5FFE39605FE82
:1001A00017250000130545E6930510002F20B50024
:1001B00083250500E3CED5FE0F00F00F17250000C4
:1001C0000325C5E4939596003305B5409386F6FF65
:1001D000E3DC06FE930E0000930150006316D50386
:1001E00017250000130585E2AF250510AF2505187A
:1001F000E39C05FEAF250518930E100093016000E7
:100200006394D501631030020F00F00F638001008A
:100210009391110093E111009308D005138501001B
:10022000730000000F00F00F930110009308D00539
:0C0230001305000073000000731000C0F4
:1010000000000000000000000000000000000000E0
:1010100000000000000000000000000000000000D0
:1010200000000000000000000000000000000000C0
:1010300000000000000000000000000000000000B0
:081040000000000000000000A8
:1020000000000000000000000000000000000000D0
:1020100000000000000000000000000000000000C0
:1020200000000000000000000000000000000000B0
:1020300000000000000000000000000000000000A0
:102040000000000000000000000000000000000090
:102050000000000000000000000000000000000080
:102060000000000000000000000000000000000070
:102070000000000000000000000000000000000060
:102080000000000000000000000000000000000050
:102090000000000000000000000000000000000040
:1020A0000000000000000000000000000000000030
:1020B0000000000000000000000000000000000020
:1020C0000000000000000000000000000000000010
:1020D0000000000000000000000000000000000000
:1020E00000000000000000000000000000000000F0
:1020F00000000000000000000000000000000000E0
:1021000000000000000000000000000000000000CF
:1021100000000000000000000000000000000000BF
:1021200000000000000000000000000000000000AF
:10213000000000000000000000000000000000009F
:10214000000000000000000000000000000000008F
:10215000000000000000000000000000000000007F
:10216000000000000000000000000000000000006F
:10217000000000000000000000000000000000005F
:10218000000000000000000000000000000000004F
:10219000000000000000000000000000000000003F
:1021A000000000000000000000000000000000002F
:1021B000000000000000000000000000000000001F
:1021C000000000000000000000000000000000000F
:1021D00000000000000000000000000000000000FF
:1021E00000000000000000000000000000000000EF
:1021F00000000000000000000000000000000000DF
:1022000000000000000000000000000000000000CE
:1022100000000000000000000000000000000000BE
:1022200000000000000000000000000000000000AE
:10223000000000000000000000000000000000009E
:10224000000000000000000000000000000000008E
:10225000000000000000000000000000000000007E
:10226000000000000000000000000000000000006E
:10227000000000000000000000000000000000005E
:10228000000000000000000000000000000000004E
:10229000000000000000000000000000000000003E
:1022A000000000000000000000000000000000002E
:1022B000000000000000000000000000000000001E
:1022C000000000000000000000000000000000000E
:1022D00000000000000000000000000000000000FE
:1022E00000000000000000000000000000000000EE
:1022F00000000000000000000000000000000000DE
:1023000000000000000000000000000000000000CD
:1023100000000000000000000000000000000000BD
:1023200000000000000000000000000000000000AD
:10233000000000000000000000000000000000009D
:10234000000000000000000000000000000000008D
:10235000000000000000000000000000000000007D
:10236000000000000000000000000000000000006D
:10237000000000000000000000000000000000005D
:10238000000000000000000000000000000000004D
:10239000000000000000000000000000000000003D
:1023A000000000000000000000000000000000002D
:1023B000000000000000000000000000000000001D
:1023C000000000000000000000000000000000000D
:1023D00000000000000000000000000000000000FD
:1023E00000000000000000000000000000000000ED
:1023F00000000000000000000000000000000000DD
:1024000000000000000000000000000000000000CC
:040000058000000077
:00000001FF

View File

@@ -1,275 +0,0 @@
:0200000480007A
:100000006F00C0006F20C0276F2080279300000082
:10001000130100009301000013020000930200008E
:100020001303000093030000130400009304000076
:10003000130500009305000013060000930600005E
:100040001307000093070000130800009308000046
:100050001309000093090000130A0000930A00002E
:10006000130B0000930B0000130C0000930C000016
:10007000130D0000930D0000130E0000930E0000FE
:10008000130F0000930F000097020000938202F804
:1000900073905230177100001301412DF32240F18B
:1000A0009392C2003301510073100134EF20103AD3
:1000B00017350000130505BA6F20D01583224508B7
:1000C0007390121483204500032185008321C5000D
:1000D0000322050183224501032385018323C501F2
:1000E00003240502832445028325C5020326050354
:1000F00083264503032785038327C50303280504B7
:1001000083284504032985048329C504032A05059A
:10011000832A4505032B8505832BC505032C05067E
:10012000832C4506032D8506832DC506032E050762
:10013000832E4507032F8507832FC50703258502D7
:1001400073002010731101142322110023263100A3
:1001500023284100232A5100232C6100232E710003
:1001600023208102232291022324A1022326B1020B
:100170002328C102232AD102232CE102232EF102DB
:1001800023200105232211052324210523263105DF
:1001900023284105232A5105232C6105232E7105AF
:1001A00023208107232291072324A1072326B107B7
:1001B0002328C107232AD107232CE107232EF10787
:1001C000F312011423245100F322001023205108BC
:1001D000F322101423225108F3223014232451084F
:1001E000F322201423265108130501006F20004735
:1010000000000000000000000000000000000000E0
:1010100000000000000000000000000000000000D0
:1010200000000000000000000000000000000000C0
:1010300000000000000000000000000000000000B0
:081040000000000000000000A8
:10200000B3E7C500B367F50093F73700B306C50023
:10201000638407023386C50093070500637ED502FB
:1020200003C705009385150093871700A38FE7FE6C
:10203000E398C5FE67800000E37ED5FE93070500A8
:1020400003A70500938747009385450023AEE7FE6D
:10205000E3E8D7FE6780000067800000B367C50033
:1020600093F737003306C5006380070293F5F50F39
:10207000930705006370C50493871700A38FB7FE0D
:10208000E31CF6FE6780000093F5F50F939785003B
:10209000B3E7B70093950701B3E5F500E374C5FE18
:1020A000930705009387470023AEB7FEE3ECC7FE16
:1020B000678000006780000083470500638E07008B
:1020C0009307050003C7170093871700E31C07FE5B
:1020D0003385A7406780000013050000678000007B
:1020E00083470500938515001305150003C7F5FF09
:1020F00063880700E386E7FE3385E74067800000DA
:10210000930700006FF05FFFB367B50093F73700E8
:10211000639E07021378C6FF330805016378050341
:10212000930705006F0000019387470093854500E2
:1021300063F8070183A6070003A70500E386E6FE10
:102140003385A7403306A640138507003386C500B4
:102150006F00400103C705008347F5FF9385150015
:10216000639AE70013051500E396C5FE130500000A
:10217000678000003385E740678000009307050013
:1021800003C705009387170093851500A38FE7FE0B
:10219000E31807FE6780000003470500930600026E
:1021A000930705006318D70003C71700938717002C
:1021B000E30CD7FE9306D0026300D7069306B00265
:1021C0006300D70483C607009305000063820604FA
:1021D0001305000093871700138606FD13172500CB
:1021E00083C607003305A700131515003305A600A5
:1021F000E39206FE638005023305A040678000007D
:1022000083C617009305000093871700E39206FC2E
:10221000130500006780000083C6170093051000B7
:1022200093871700E39606FA130500006FF09FFEF0
:1022300017F6FFFF130606DD032706008327460077
:102240009355F5413367F7006306070297F6FFFFE2
:10225000938646DF9307000023A0F60013080000D2
:1022600023A2060103270600832746003367F700F1
:10227000E31207FE2320A6002322B6006F00000011
:10228000130101FF1305903423261100EFF05FFACC
:10229000130101FE1306C1001307B10113039000DF
:1022A0006F008000138707009377F500B337F300C2
:1022B000B307F04093F777029376F500938707030F
:1022C000B387F6002300F7009396C5011355450028
:1022D0009307F7FF33E5A60093D54500E314E6FC2A
:1022E0000345C100230E01006302050693050600A5
:1022F00097F6FFFF938606D117F6FFFF130686D4E5
:1023000003A7060083A74600130805009385150060
:102310003367F700B70801016302070213070000E3
:102320002320E600930700002322F60003A70600FF
:1023300083A746003367F700E31207FE03C50500D5
:1023400023A0060123A21601E31C05FA13010102D2
:102350006780000037F6FFFF3307C500B7E70300CB
:102360006370F7149356C50093820640172300004C
:10237000130343C993972200B307F30003A7070091
:102380003375C5006306070293760704638C060E57
:1023900093760708639206189306F000639ED5169D
:1023A0001367070823A0E700730005126780000089
:1023B0001747000013074704832507006384051CA3
:1023C00083A74500174600000326C6022320F70016
:1023D0006382C70C03A7050093972200B307F3009D
:1023E0001357C7001317A700136EF70D1366F701F5
:1023F00023A0C7017300051297470000938707E0E9
:1024000093963600B386D70083A706006392071E13
:1024100083A7050023A0F60083A74500B7050400A5
:1024200023A2F600F3A50510B707C0FFB307F50018
:10243000B716000013070500B386D70083AE070068
:1024400003AE470083A8870003A8C7002320D70155
:102450002322C7012324170123260701938707019D
:1024600013070701E39CD7FC739005109397220094
:10247000B307F30023A0C700730005120F1000007C
:10248000678000001367070423A0E70073000512AC
:10249000678000009747000023AE07F46FF09FF3BA
:1024A00013051004971500009385C58297F6FFFF6A
:1024B000938646B517F6FFFF1306C6B803A70600B6
:1024C00083A7460013030500938515003367F700C3
:1024D000B703010163020702930700002320F600FF
:1024E000130800002322060103A7060083A7460065
:1024F0003367F700E31207FE03C5050023A066005B
:1025000023A27600E31C05FA130101FF1305300036
:1025100023261100EFF0DFD113051004970500000A
:102520009385857F97F6FFFF9386C6AD17F6FFFF6D
:10253000130646B103A7060083A74600130E050045
:10254000938515003367F700B70E01016302070298
:10255000930700002320F600130800002322060141
:1025600003A7060083A746003367F700E31207FEC0
:1025700003C5050023A0C60123A2D601E31C05FA6A
:102580006FF09FF813051004970500009385457DB3
:1025900097F6FFFF938606A717F6FFFF130686AA96
:1025A00003A7060083A74600130F050093851500B7
:1025B0003367F700B70F01016302070293070000BA
:1025C0002320F600130800002322060103A70600BB
:1025D00083A746003367F700E31207FE03C5050033
:1025E00023A0E60123A2F601E31C05FA6FF0DFF158
:1025F00013051004970500009385057897F6FFFFF3
:10260000938646A017F6FFFF1306C6A303A706008E
:1026100083A7460013080500938515003367F7006C
:10262000B708010163020702130700002320E60038
:10263000930700002322F60003A7060083A74600A5
:102640003367F700E31207FE03C5050023A0060168
:1026500023A21601E31C05FA6FF01FEB8325C508C2
:10266000130101FB23248104232611042322910456
:1026700023202105232E3103232C4103232A510338
:10268000232861032326710323248103232291033A
:102690002320A103232EB10193078000130405001A
:1026A0006386F516930720006380F506938745FF40
:1026B000130710006376F7009307F0006392F5228A
:1026C00003258408EFF01FC91305040003248104C7
:1026D0008320C10483244104032901048329C10305
:1026E000032A8103832A4103032B0103832BC102A5
:1026F000032C8102832C4102032D0102832DC10191
:10270000130101056FD09F9B03274508937737007E
:1027100063980708EF078000731030000327070055
:1027200083A70700630AF706130510049705000046
:102730009385057197F6FFFF9386C68C17F6FFFF0A
:102740001306469003A7060083A74600130805005A
:10275000938515003367F700B7080101630207028C
:10276000130700002320E600930700002322F60051
:1027700003A7060083A746003367F700E31207FEAE
:1027800003C5050023A0060123A21601E31C05FAD8
:1027900013053000EFF0DFA913051000EFF05FA97B
:1027A00097050000938585671306100497F6FFFFD1
:1027B0009386468517F5FFFF1305C58803A7060016
:1027C00083A74600130E0600938515003367F700B4
:1027D000B70E010163020702930700002320F500F2
:1027E000130800002322050103A7060083A7460063
:1027F0003367F700E31207FE03C6050023A0C601F6
:1028000023A2D601E31C06FA6FF09FF8032B850282
:10281000371C0000974400009384449E171D00005D
:10282000130D4D7EB70C0400974B0000938B8BBCAF
:102830006F00C00123A2870023A08B00B717000000
:10284000330CFC00B7F703006302FC1C9357CC0069
:10285000139437003386840003260600E30006FE47
:102860009387074093972700B307FD0083A70700CE
:1028700013F60704630C06122326F100F3AD0C10C7
:10288000B707C0FFB305FC003716000013050C00A6
:102890002324B100EFF05F87630005028327C100A6
:1028A0008325810093F707086382070A3716000023
:1028B00013050C00EFF0CFF43384840073900D10F7
:1028C00083A70B0023200400E39607F69747000038
:1028D000938787B223A08B0023A087006FF01FF699
:1028E00093051004170600001306465897E6FFFFED
:1028F0009386467117E5FFFF1305C57403A706000D
:1029000083A7460013830500130616003367F700FC
:10291000B703010163020702930700002320F500BB
:10292000130800002322050103A7060083A7460021
:102930003367F700E31207FE8345060023A0660015
:1029400023A27600E39C05FA6FF09FE4930710043E
:10295000170600001306464997E6FFFF9386866A2E
:1029600097E5FFFF9385056E138907001306160090
:10297000B70901016F004001930700001308000030
:1029800023A0F50023A2050103A7060083A74600A4
:102990003367F700E31207FE8347060023A02601F2
:1029A00023A23601E39207FC6FF09FDE9307100429
:1029B000170600001306064097E6FFFF938686641D
:1029C00097E5FFFF93850568138A07001306160035
:1029D000B70A01016F0040019307000013080000CF
:1029E00023A0F50023A2050103A7060083A7460044
:1029F0003367F700E31207FE8347060023A0460172
:102A000023A25601E39207FC6FF09FD813050B0039
:102A1000EFF01F82F32740F163920716172600009C
:102A20001306465E9357C600130101F69397A7005D
:102A3000232E1108232C8108971500009385855CAF
:102A400093E7170023A0F500B707002093D6C50031
:102A5000370700809387F70C232EF6FEB3E7E600D6
:102A600073900718F3260018639AD716130405000D
:102A70001347F7FF9307F00197020000938242018A
:102A8000F39252307310073B7390073A97D7BF7F8A
:102A90009387876B73905710F3270034B708C07F74
:102AA000B387170173900714B7B700009387071017
:102AB00073902730B7E701007390073073504030B0
:102AC0009737C07F93870754174700002326F79254
:102AD0009737C07F9387077217470000232CF79022
:102AE00037030800173700001307C751173E0000CF
:102AF000130ECE7093076001930500001303F303D8
:102B0000938888001396F50193D61700B366D60014
:102B100033866700B3C7F600330817011316C600E3
:102B2000939757002320C7002322070193F707023A
:102B300013078700B3E7F60093D51500E314EEFC06
:102B400013060009930500001305010097370000E4
:102B500023A4076AEFF08FD0B70700803304F40096
:102B60001305010023228108EFD04FD58320C1092E
:102B7000032481091301010A67800000B7B74A07DF
:102B8000B7050800938767AA130700009385C5FF60
:102B900037080080370500406F00C0022FA00600F4
:102BA0001316F70193D61700B366D600B3C7D70044
:102BB0009397E7013376F5001357170093870600C4
:102BC0003367E600B3F6B70013F61700B3860601C5
:102BD000E31606FC03A006006FF09FFC93051004AB
:102BE000170600001306462B97E6FFFF93868641E3
:102BF00017E5FFFF1305054503A7060083A7460059
:102C000013880500130616003367F700B7080101A3
:102C100063020702130700002320E500930700006A
:102C20002322F50003A7060083A746003367F700B9
:102C3000E31207FE8345060023A0060123A2160126
:102C4000E39C05FA13053000EFF08FDE678000008B
:102C50003705008093050080970600009386863A2A
:102C600023A0A6002FA7B600B70E00809301200076
:102C70006312D70583A70600B70E0080938E0E80DF
:102C8000930130006398D703B70500802FA7B600E3
:102C9000B70E0080938E0E8093014000631CD70115
:102CA00083A70600930E0080930150006394D70120
:102CB000631A3000139511006300050013651500B9
:102CC000730000001305100073000000731000C0B3
:102CD000417373657274696F6E206661696C6564B7
:102CE0003A2061646472203E3D202831554C203CDE
:102CF0003C203132292026262061646472203C2049
:102D00003633202A202831554C203C3C20313229B2
:102D10000A000000417373657274696F6E2066610A
:102D2000696C65643A20212870745B315D5B616475
:102D300064722F2831554C203C3C203132295D20D3
:102D4000262030783038302920262620636175739C
:102D500065203D3D203078660A00000041737365B0
:102D60007274696F6E206661696C65643A206E6F7B
:102D700064650A00417373657274696F6E206661E1
:102D8000696C65643A20757365725F6D6170706916
:102D90006E675B616464722F2831554C203C3C2087
:102DA0003132295D2E61646472203D3D20300A007D
:102DB000417373657274696F6E206661696C6564D6
:102DC0003A2070745B315D5B616464722F28315509
:102DD0004C203C3C203132295D2026203078303494
:102DE000300A0000417373657274696F6E2066610A
:102DF000696C65643A2070745B315D5B6164647218
:102E00002F2831554C203C3C203132295D20262092
:102E100030783038300A0000417373657274696F1E
:102E20006E206661696C65643A2074662D3E65703B
:102E30006320252034203D3D20300A004173736516
:102E40007274696F6E206661696C65643A20212234
:102E5000696C6C6567616C20696E737472756374FC
:102E6000696F6E220A000000417373657274696FA6
:102E70006E206661696C65643A202122756E657802
:102E800070656374656420657863657074696F6EDE
:102E9000220A0000417373657274696F6E20666167
:102EA000696C65643A202122756E737570706F725B
:102EB0007465642073617470206D6F6465220A000C
:040000058000000077
:00000001FF

View File

@@ -1,275 +0,0 @@
:0200000480007A
:100000006F00C0006F20C0276F2080279300000082
:10001000130100009301000013020000930200008E
:100020001303000093030000130400009304000076
:10003000130500009305000013060000930600005E
:100040001307000093070000130800009308000046
:100050001309000093090000130A0000930A00002E
:10006000130B0000930B0000130C0000930C000016
:10007000130D0000930D0000130E0000930E0000FE
:10008000130F0000930F000097020000938202F804
:1000900073905230177100001301412DF32240F18B
:1000A0009392C2003301510073100134EF20103AD3
:1000B00017350000130505BA6F20D01583224508B7
:1000C0007390121483204500032185008321C5000D
:1000D0000322050183224501032385018323C501F2
:1000E00003240502832445028325C5020326050354
:1000F00083264503032785038327C50303280504B7
:1001000083284504032985048329C504032A05059A
:10011000832A4505032B8505832BC505032C05067E
:10012000832C4506032D8506832DC506032E050762
:10013000832E4507032F8507832FC50703258502D7
:1001400073002010731101142322110023263100A3
:1001500023284100232A5100232C6100232E710003
:1001600023208102232291022324A1022326B1020B
:100170002328C102232AD102232CE102232EF102DB
:1001800023200105232211052324210523263105DF
:1001900023284105232A5105232C6105232E7105AF
:1001A00023208107232291072324A1072326B107B7
:1001B0002328C107232AD107232CE107232EF10787
:1001C000F312011423245100F322001023205108BC
:1001D000F322101423225108F3223014232451084F
:1001E000F322201423265108130501006F20004735
:1010000000000000000000000000000000000000E0
:1010100000000000000000000000000000000000D0
:1010200000000000000000000000000000000000C0
:1010300000000000000000000000000000000000B0
:081040000000000000000000A8
:10200000B3E7C500B367F50093F73700B306C50023
:10201000638407023386C50093070500637ED502FB
:1020200003C705009385150093871700A38FE7FE6C
:10203000E398C5FE67800000E37ED5FE93070500A8
:1020400003A70500938747009385450023AEE7FE6D
:10205000E3E8D7FE6780000067800000B367C50033
:1020600093F737003306C5006380070293F5F50F39
:10207000930705006370C50493871700A38FB7FE0D
:10208000E31CF6FE6780000093F5F50F939785003B
:10209000B3E7B70093950701B3E5F500E374C5FE18
:1020A000930705009387470023AEB7FEE3ECC7FE16
:1020B000678000006780000083470500638E07008B
:1020C0009307050003C7170093871700E31C07FE5B
:1020D0003385A7406780000013050000678000007B
:1020E00083470500938515001305150003C7F5FF09
:1020F00063880700E386E7FE3385E74067800000DA
:10210000930700006FF05FFFB367B50093F73700E8
:10211000639E07021378C6FF330805016378050341
:10212000930705006F0000019387470093854500E2
:1021300063F8070183A6070003A70500E386E6FE10
:102140003385A7403306A640138507003386C500B4
:102150006F00400103C705008347F5FF9385150015
:10216000639AE70013051500E396C5FE130500000A
:10217000678000003385E740678000009307050013
:1021800003C705009387170093851500A38FE7FE0B
:10219000E31807FE6780000003470500930600026E
:1021A000930705006318D70003C71700938717002C
:1021B000E30CD7FE9306D0026300D7069306B00265
:1021C0006300D70483C607009305000063820604FA
:1021D0001305000093871700138606FD13172500CB
:1021E00083C607003305A700131515003305A600A5
:1021F000E39206FE638005023305A040678000007D
:1022000083C617009305000093871700E39206FC2E
:10221000130500006780000083C6170093051000B7
:1022200093871700E39606FA130500006FF09FFEF0
:1022300017F6FFFF130606DD032706008327460077
:102240009355F5413367F7006306070297F6FFFFE2
:10225000938646DF9307000023A0F60013080000D2
:1022600023A2060103270600832746003367F700F1
:10227000E31207FE2320A6002322B6006F00000011
:10228000130101FF1305903423261100EFF05FFACC
:10229000130101FE1306C1001307B10113039000DF
:1022A0006F008000138707009377F500B337F300C2
:1022B000B307F04093F777029376F500938707030F
:1022C000B387F6002300F7009396C5011355450028
:1022D0009307F7FF33E5A60093D54500E314E6FC2A
:1022E0000345C100230E01006302050693050600A5
:1022F00097F6FFFF938606D117F6FFFF130686D4E5
:1023000003A7060083A74600130805009385150060
:102310003367F700B70801016302070213070000E3
:102320002320E600930700002322F60003A70600FF
:1023300083A746003367F700E31207FE03C50500D5
:1023400023A0060123A21601E31C05FA13010102D2
:102350006780000037F6FFFF3307C500B7E70300CB
:102360006370F7149356C50093820640172300004C
:10237000130343C993972200B307F30003A7070091
:102380003375C5006306070293760704638C060E57
:1023900093760708639206189306F000639ED5169D
:1023A0001367070823A0E700730005126780000089
:1023B0001747000013074704832507006384051CA3
:1023C00083A74500174600000326C6022320F70016
:1023D0006382C70C03A7050093972200B307F3009D
:1023E0001357C7001317A700136EF70D1366F701F5
:1023F00023A0C7017300051297470000938707E0E9
:1024000093963600B386D70083A706006392071E13
:1024100083A7050023A0F60083A74500B7050400A5
:1024200023A2F600F3A50510B707C0FFB307F50018
:10243000B716000013070500B386D70083AE070068
:1024400003AE470083A8870003A8C7002320D70155
:102450002322C7012324170123260701938707019D
:1024600013070701E39CD7FC739005109397220094
:10247000B307F30023A0C700730005120F1000007C
:10248000678000001367070423A0E70073000512AC
:10249000678000009747000023AE07F46FF09FF3BA
:1024A00013051004971500009385458297F6FFFFEA
:1024B000938646B517F6FFFF1306C6B803A70600B6
:1024C00083A7460013030500938515003367F700C3
:1024D000B703010163020702930700002320F600FF
:1024E000130800002322060103A7060083A7460065
:1024F0003367F700E31207FE03C5050023A066005B
:1025000023A27600E31C05FA130101FF1305300036
:1025100023261100EFF0DFD113051004970500000A
:102520009385057F97F6FFFF9386C6AD17F6FFFFED
:10253000130646B103A7060083A74600130E050045
:10254000938515003367F700B70E01016302070298
:10255000930700002320F600130800002322060141
:1025600003A7060083A746003367F700E31207FEC0
:1025700003C5050023A0C60123A2D601E31C05FA6A
:102580006FF09FF813051004970500009385C57C34
:1025900097F6FFFF938606A717F6FFFF130686AA96
:1025A00003A7060083A74600130F050093851500B7
:1025B0003367F700B70F01016302070293070000BA
:1025C0002320F600130800002322060103A70600BB
:1025D00083A746003367F700E31207FE03C5050033
:1025E00023A0E60123A2F601E31C05FA6FF0DFF158
:1025F00013051004970500009385857797F6FFFF74
:10260000938646A017F6FFFF1306C6A303A706008E
:1026100083A7460013080500938515003367F7006C
:10262000B708010163020702130700002320E60038
:10263000930700002322F60003A7060083A74600A5
:102640003367F700E31207FE03C5050023A0060168
:1026500023A21601E31C05FA6FF01FEB8325C508C2
:10266000130101FB23248104232611042322910456
:1026700023202105232E3103232C4103232A510338
:10268000232861032326710323248103232291033A
:102690002320A103232EB10193078000130405001A
:1026A0006386F516930720006380F506938745FF40
:1026B000130710006376F7009307F0006392F5228A
:1026C00003258408EFF01FC91305040003248104C7
:1026D0008320C10483244104032901048329C10305
:1026E000032A8103832A4103032B0103832BC102A5
:1026F000032C8102832C4102032D0102832DC10191
:10270000130101056FD09F9B03274508937737007E
:1027100063980708EF078000731030000327070055
:1027200083A70700630AF706130510049705000046
:102730009385857097F6FFFF9386C68C17F6FFFF8B
:102740001306469003A7060083A74600130805005A
:10275000938515003367F700B7080101630207028C
:10276000130700002320E600930700002322F60051
:1027700003A7060083A746003367F700E31207FEAE
:1027800003C5050023A0060123A21601E31C05FAD8
:1027900013053000EFF0DFA913051000EFF05FA97B
:1027A00097050000938505671306100497F6FFFF51
:1027B0009386468517F5FFFF1305C58803A7060016
:1027C00083A74600130E0600938515003367F700B4
:1027D000B70E010163020702930700002320F500F2
:1027E000130800002322050103A7060083A7460063
:1027F0003367F700E31207FE03C6050023A0C601F6
:1028000023A2D601E31C06FA6FF09FF8032B850282
:10281000371C0000974400009384449E171D00005D
:10282000130D4D7EB70C0400974B0000938B8BBCAF
:102830006F00C00123A2870023A08B00B717000000
:10284000330CFC00B7F703006302FC1C9357CC0069
:10285000139437003386840003260600E30006FE47
:102860009387074093972700B307FD0083A70700CE
:1028700013F60704630C06122326F100F3AD0C10C7
:10288000B707C0FFB305FC003716000013050C00A6
:102890002324B100EFF05F87630005028327C100A6
:1028A0008325810093F707086382070A3716000023
:1028B00013050C00EFF0CFF43384840073900D10F7
:1028C00083A70B0023200400E39607F69747000038
:1028D000938787B223A08B0023A087006FF01FF699
:1028E00093051004170600001306C65797E6FFFF6E
:1028F0009386467117E5FFFF1305C57403A706000D
:1029000083A7460013830500130616003367F700FC
:10291000B703010163020702930700002320F500BB
:10292000130800002322050103A7060083A7460021
:102930003367F700E31207FE8345060023A0660015
:1029400023A27600E39C05FA6FF09FE4930710043E
:10295000170600001306C64897E6FFFF9386866AAF
:1029600097E5FFFF9385056E138907001306160090
:10297000B70901016F004001930700001308000030
:1029800023A0F50023A2050103A7060083A74600A4
:102990003367F700E31207FE8347060023A02601F2
:1029A00023A23601E39207FC6FF09FDE9307100429
:1029B000170600001306863F97E6FFFF938686649E
:1029C00097E5FFFF93850568138A07001306160035
:1029D000B70A01016F0040019307000013080000CF
:1029E00023A0F50023A2050103A7060083A7460044
:1029F0003367F700E31207FE8347060023A0460172
:102A000023A25601E39207FC6FF09FD813050B0039
:102A1000EFF01F82F32740F163920716172600009C
:102A20001306465E9357C600130101F69397A7005D
:102A3000232E1108232C8108971500009385855CAF
:102A400093E7170023A0F500B707002093D6C50031
:102A5000370700809387F70C232EF6FEB3E7E600D6
:102A600073900718F3260018639AD716130405000D
:102A70001347F7FF9307F00197020000938242018A
:102A8000F39252307310073B7390073A97D7BF7F8A
:102A90009387876B73905710F3270034B708C07F74
:102AA000B387170173900714B7B700009387071017
:102AB00073902730B7E701007390073073504030B0
:102AC0009737C07F93870754174700002326F79254
:102AD0009737C07F9387077217470000232CF79022
:102AE00037030800173700001307C751173E0000CF
:102AF000130ECE7093072002930500001303F30317
:102B0000938888001396F50193D61700B366D60014
:102B100033866700B3C7F600330817011316C600E3
:102B2000939757002320C7002322070193F707023A
:102B300013078700B3E7F60093D51500E314EEFC06
:102B400013060009930500001305010097370000E4
:102B500023A4076AEFF08FD0B70700803304F40096
:102B60001305010023228108EFD04FD58320C1092E
:102B7000032481091301010A67800000B7C7540AC2
:102B8000B70508009387A72E130700009385C5FF9C
:102B900037080080370500406F00C0022FA00600F4
:102BA0001316F70193D61700B366D600B3C7D70044
:102BB0009397E7013376F5001357170093870600C4
:102BC0003367E600B3F6B70013F61700B3860601C5
:102BD000E31606FC03A006006FF09FFC93051004AB
:102BE000170600001306C62A97E6FFFF9386864164
:102BF00017E5FFFF1305054503A7060083A7460059
:102C000013880500130616003367F700B7080101A3
:102C100063020702130700002320E500930700006A
:102C20002322F50003A7060083A746003367F700B9
:102C3000E31207FE8345060023A0060123A2160126
:102C4000E39C05FA13053000EFF08FDE678000008B
:102C50003705008093050080970600009386863A2A
:102C600023A0A6002FA7B660B70E00809301200016
:102C7000631ED70383A70600B70E008093013000C0
:102C80006396D703B70500802FA7B660B70E008004
:102C900093014000631CD70183A70600B70E008094
:102CA000930150006394D701631A3000139511000B
:102CB0006300050013651500730000001305100084
:082CC00073000000731000C056
:102CC800417373657274696F6E206661696C6564BF
:102CD8003A2061646472203E3D202831554C203CE6
:102CE8003C203132292026262061646472203C2051
:102CF8003633202A202831554C203C3C20313229BB
:102D08000A000000417373657274696F6E20666112
:102D1800696C65643A20212870745B315D5B61647D
:102D280064722F2831554C203C3C203132295D20DB
:102D380026203078303830292026262063617573A4
:102D480065203D3D203078660A00000041737365B8
:102D58007274696F6E206661696C65643A206E6F83
:102D680064650A00417373657274696F6E206661E9
:102D7800696C65643A20757365725F6D617070691E
:102D88006E675B616464722F2831554C203C3C208F
:102D98003132295D2E61646472203D3D20300A0085
:102DA800417373657274696F6E206661696C6564DE
:102DB8003A2070745B315D5B616464722F28315511
:102DC8004C203C3C203132295D202620307830349C
:102DD800300A0000417373657274696F6E20666112
:102DE800696C65643A2070745B315D5B6164647220
:102DF8002F2831554C203C3C203132295D2026209B
:102E080030783038300A0000417373657274696F26
:102E18006E206661696C65643A2074662D3E657043
:102E28006320252034203D3D20300A00417373651E
:102E38007274696F6E206661696C65643A2021223C
:102E4800696C6C6567616C20696E73747275637404
:102E5800696F6E220A000000417373657274696FAE
:102E68006E206661696C65643A202122756E65780A
:102E780070656374656420657863657074696F6EE6
:102E8800220A0000417373657274696F6E2066616F
:102E9800696C65643A202122756E737570706F7263
:102EA8007465642073617470206D6F6465220A0014
:040000058000000077
:00000001FF

View File

@@ -1,275 +0,0 @@
:0200000480007A
:100000006F00C0006F20C0276F2080279300000082
:10001000130100009301000013020000930200008E
:100020001303000093030000130400009304000076
:10003000130500009305000013060000930600005E
:100040001307000093070000130800009308000046
:100050001309000093090000130A0000930A00002E
:10006000130B0000930B0000130C0000930C000016
:10007000130D0000930D0000130E0000930E0000FE
:10008000130F0000930F000097020000938202F804
:1000900073905230177100001301412DF32240F18B
:1000A0009392C2003301510073100134EF20103AD3
:1000B00017350000130505BA6F20D01583224508B7
:1000C0007390121483204500032185008321C5000D
:1000D0000322050183224501032385018323C501F2
:1000E00003240502832445028325C5020326050354
:1000F00083264503032785038327C50303280504B7
:1001000083284504032985048329C504032A05059A
:10011000832A4505032B8505832BC505032C05067E
:10012000832C4506032D8506832DC506032E050762
:10013000832E4507032F8507832FC50703258502D7
:1001400073002010731101142322110023263100A3
:1001500023284100232A5100232C6100232E710003
:1001600023208102232291022324A1022326B1020B
:100170002328C102232AD102232CE102232EF102DB
:1001800023200105232211052324210523263105DF
:1001900023284105232A5105232C6105232E7105AF
:1001A00023208107232291072324A1072326B107B7
:1001B0002328C107232AD107232CE107232EF10787
:1001C000F312011423245100F322001023205108BC
:1001D000F322101423225108F3223014232451084F
:1001E000F322201423265108130501006F20004735
:1010000000000000000000000000000000000000E0
:1010100000000000000000000000000000000000D0
:1010200000000000000000000000000000000000C0
:1010300000000000000000000000000000000000B0
:081040000000000000000000A8
:10200000B3E7C500B367F50093F73700B306C50023
:10201000638407023386C50093070500637ED502FB
:1020200003C705009385150093871700A38FE7FE6C
:10203000E398C5FE67800000E37ED5FE93070500A8
:1020400003A70500938747009385450023AEE7FE6D
:10205000E3E8D7FE6780000067800000B367C50033
:1020600093F737003306C5006380070293F5F50F39
:10207000930705006370C50493871700A38FB7FE0D
:10208000E31CF6FE6780000093F5F50F939785003B
:10209000B3E7B70093950701B3E5F500E374C5FE18
:1020A000930705009387470023AEB7FEE3ECC7FE16
:1020B000678000006780000083470500638E07008B
:1020C0009307050003C7170093871700E31C07FE5B
:1020D0003385A7406780000013050000678000007B
:1020E00083470500938515001305150003C7F5FF09
:1020F00063880700E386E7FE3385E74067800000DA
:10210000930700006FF05FFFB367B50093F73700E8
:10211000639E07021378C6FF330805016378050341
:10212000930705006F0000019387470093854500E2
:1021300063F8070183A6070003A70500E386E6FE10
:102140003385A7403306A640138507003386C500B4
:102150006F00400103C705008347F5FF9385150015
:10216000639AE70013051500E396C5FE130500000A
:10217000678000003385E740678000009307050013
:1021800003C705009387170093851500A38FE7FE0B
:10219000E31807FE6780000003470500930600026E
:1021A000930705006318D70003C71700938717002C
:1021B000E30CD7FE9306D0026300D7069306B00265
:1021C0006300D70483C607009305000063820604FA
:1021D0001305000093871700138606FD13172500CB
:1021E00083C607003305A700131515003305A600A5
:1021F000E39206FE638005023305A040678000007D
:1022000083C617009305000093871700E39206FC2E
:10221000130500006780000083C6170093051000B7
:1022200093871700E39606FA130500006FF09FFEF0
:1022300017F6FFFF130606DD032706008327460077
:102240009355F5413367F7006306070297F6FFFFE2
:10225000938646DF9307000023A0F60013080000D2
:1022600023A2060103270600832746003367F700F1
:10227000E31207FE2320A6002322B6006F00000011
:10228000130101FF1305903423261100EFF05FFACC
:10229000130101FE1306C1001307B10113039000DF
:1022A0006F008000138707009377F500B337F300C2
:1022B000B307F04093F777029376F500938707030F
:1022C000B387F6002300F7009396C5011355450028
:1022D0009307F7FF33E5A60093D54500E314E6FC2A
:1022E0000345C100230E01006302050693050600A5
:1022F00097F6FFFF938606D117F6FFFF130686D4E5
:1023000003A7060083A74600130805009385150060
:102310003367F700B70801016302070213070000E3
:102320002320E600930700002322F60003A70600FF
:1023300083A746003367F700E31207FE03C50500D5
:1023400023A0060123A21601E31C05FA13010102D2
:102350006780000037F6FFFF3307C500B7E70300CB
:102360006370F7149356C50093820640172300004C
:10237000130343C993972200B307F30003A7070091
:102380003375C5006306070293760704638C060E57
:1023900093760708639206189306F000639ED5169D
:1023A0001367070823A0E700730005126780000089
:1023B0001747000013074704832507006384051CA3
:1023C00083A74500174600000326C6022320F70016
:1023D0006382C70C03A7050093972200B307F3009D
:1023E0001357C7001317A700136EF70D1366F701F5
:1023F00023A0C7017300051297470000938707E0E9
:1024000093963600B386D70083A706006392071E13
:1024100083A7050023A0F60083A74500B7050400A5
:1024200023A2F600F3A50510B707C0FFB307F50018
:10243000B716000013070500B386D70083AE070068
:1024400003AE470083A8870003A8C7002320D70155
:102450002322C7012324170123260701938707019D
:1024600013070701E39CD7FC739005109397220094
:10247000B307F30023A0C700730005120F1000007C
:10248000678000001367070423A0E70073000512AC
:10249000678000009747000023AE07F46FF09FF3BA
:1024A00013051004971500009385858297F6FFFFAA
:1024B000938646B517F6FFFF1306C6B803A70600B6
:1024C00083A7460013030500938515003367F700C3
:1024D000B703010163020702930700002320F600FF
:1024E000130800002322060103A7060083A7460065
:1024F0003367F700E31207FE03C5050023A066005B
:1025000023A27600E31C05FA130101FF1305300036
:1025100023261100EFF0DFD113051004970500000A
:102520009385457F97F6FFFF9386C6AD17F6FFFFAD
:10253000130646B103A7060083A74600130E050045
:10254000938515003367F700B70E01016302070298
:10255000930700002320F600130800002322060141
:1025600003A7060083A746003367F700E31207FEC0
:1025700003C5050023A0C60123A2D601E31C05FA6A
:102580006FF09FF813051004970500009385057DF3
:1025900097F6FFFF938606A717F6FFFF130686AA96
:1025A00003A7060083A74600130F050093851500B7
:1025B0003367F700B70F01016302070293070000BA
:1025C0002320F600130800002322060103A70600BB
:1025D00083A746003367F700E31207FE03C5050033
:1025E00023A0E60123A2F601E31C05FA6FF0DFF158
:1025F00013051004970500009385C57797F6FFFF34
:10260000938646A017F6FFFF1306C6A303A706008E
:1026100083A7460013080500938515003367F7006C
:10262000B708010163020702130700002320E60038
:10263000930700002322F60003A7060083A74600A5
:102640003367F700E31207FE03C5050023A0060168
:1026500023A21601E31C05FA6FF01FEB8325C508C2
:10266000130101FB23248104232611042322910456
:1026700023202105232E3103232C4103232A510338
:10268000232861032326710323248103232291033A
:102690002320A103232EB10193078000130405001A
:1026A0006386F516930720006380F506938745FF40
:1026B000130710006376F7009307F0006392F5228A
:1026C00003258408EFF01FC91305040003248104C7
:1026D0008320C10483244104032901048329C10305
:1026E000032A8103832A4103032B0103832BC102A5
:1026F000032C8102832C4102032D0102832DC10191
:10270000130101056FD09F9B03274508937737007E
:1027100063980708EF078000731030000327070055
:1027200083A70700630AF706130510049705000046
:102730009385C57097F6FFFF9386C68C17F6FFFF4B
:102740001306469003A7060083A74600130805005A
:10275000938515003367F700B7080101630207028C
:10276000130700002320E600930700002322F60051
:1027700003A7060083A746003367F700E31207FEAE
:1027800003C5050023A0060123A21601E31C05FAD8
:1027900013053000EFF0DFA913051000EFF05FA97B
:1027A00097050000938545671306100497F6FFFF11
:1027B0009386468517F5FFFF1305C58803A7060016
:1027C00083A74600130E0600938515003367F700B4
:1027D000B70E010163020702930700002320F500F2
:1027E000130800002322050103A7060083A7460063
:1027F0003367F700E31207FE03C6050023A0C601F6
:1028000023A2D601E31C06FA6FF09FF8032B850282
:10281000371C0000974400009384449E171D00005D
:10282000130D4D7EB70C0400974B0000938B8BBCAF
:102830006F00C00123A2870023A08B00B717000000
:10284000330CFC00B7F703006302FC1C9357CC0069
:10285000139437003386840003260600E30006FE47
:102860009387074093972700B307FD0083A70700CE
:1028700013F60704630C06122326F100F3AD0C10C7
:10288000B707C0FFB305FC003716000013050C00A6
:102890002324B100EFF05F87630005028327C100A6
:1028A0008325810093F707086382070A3716000023
:1028B00013050C00EFF0CFF43384840073900D10F7
:1028C00083A70B0023200400E39607F69747000038
:1028D000938787B223A08B0023A087006FF01FF699
:1028E00093051004170600001306065897E6FFFF2D
:1028F0009386467117E5FFFF1305C57403A706000D
:1029000083A7460013830500130616003367F700FC
:10291000B703010163020702930700002320F500BB
:10292000130800002322050103A7060083A7460021
:102930003367F700E31207FE8345060023A0660015
:1029400023A27600E39C05FA6FF09FE4930710043E
:10295000170600001306064997E6FFFF9386866A6E
:1029600097E5FFFF9385056E138907001306160090
:10297000B70901016F004001930700001308000030
:1029800023A0F50023A2050103A7060083A74600A4
:102990003367F700E31207FE8347060023A02601F2
:1029A00023A23601E39207FC6FF09FDE9307100429
:1029B000170600001306C63F97E6FFFF938686645E
:1029C00097E5FFFF93850568138A07001306160035
:1029D000B70A01016F0040019307000013080000CF
:1029E00023A0F50023A2050103A7060083A7460044
:1029F0003367F700E31207FE8347060023A0460172
:102A000023A25601E39207FC6FF09FD813050B0039
:102A1000EFF01F82F32740F163920716172600009C
:102A20001306465E9357C600130101F69397A7005D
:102A3000232E1108232C8108971500009385855CAF
:102A400093E7170023A0F500B707002093D6C50031
:102A5000370700809387F70C232EF6FEB3E7E600D6
:102A600073900718F3260018639AD716130405000D
:102A70001347F7FF9307F00197020000938242018A
:102A8000F39252307310073B7390073A97D7BF7F8A
:102A90009387876B73905710F3270034B708C07F74
:102AA000B387170173900714B7B700009387071017
:102AB00073902730B7E701007390073073504030B0
:102AC0009737C07F93870754174700002326F79254
:102AD0009737C07F9387077217470000232CF79022
:102AE00037030800173700001307C751173E0000CF
:102AF000130ECE7093079003930500001303F303A6
:102B0000938888001396F50193D61700B366D60014
:102B100033866700B3C7F600330817011316C600E3
:102B2000939757002320C7002322070193F707023A
:102B300013078700B3E7F60093D51500E314EEFC06
:102B400013060009930500001305010097370000E4
:102B500023A4076AEFF08FD0B70700803304F40096
:102B60001305010023228108EFD04FD58320C1092E
:102B7000032481091301010A67800000B7673D0A39
:102B8000B70508009387279E130700009385C5FFAC
:102B900037080080370500406F00C0022FA00600F4
:102BA0001316F70193D61700B366D600B3C7D70044
:102BB0009397E7013376F5001357170093870600C4
:102BC0003367E600B3F6B70013F61700B3860601C5
:102BD000E31606FC03A006006FF09FFC93051004AB
:102BE000170600001306062B97E6FFFF9386864123
:102BF00017E5FFFF1305054503A7060083A7460059
:102C000013880500130616003367F700B7080101A3
:102C100063020702130700002320E500930700006A
:102C20002322F50003A7060083A746003367F700B9
:102C3000E31207FE8345060023A0060123A2160126
:102C4000E39C05FA13053000EFF08FDE678000008B
:102C50003705008093050080970600009386863A2A
:102C600023A0A6002FA7B6A0B70E008093012000D6
:102C70006310D70583A70600930E008093013000F0
:102C80006398D7039305100023A006002FA7B6A0D2
:102C9000930E000093014000631CD70183A7060038
:102CA000930E1000930150006394D701631A300013
:102CB00013951100630005001365150073000000F3
:0C2CC0001305100073000000731000C02A
:102CCC00417373657274696F6E206661696C6564BB
:102CDC003A2061646472203E3D202831554C203CE2
:102CEC003C203132292026262061646472203C204D
:102CFC003633202A202831554C203C3C20313229B7
:102D0C000A000000417373657274696F6E2066610E
:102D1C00696C65643A20212870745B315D5B616479
:102D2C0064722F2831554C203C3C203132295D20D7
:102D3C0026203078303830292026262063617573A0
:102D4C0065203D3D203078660A00000041737365B4
:102D5C007274696F6E206661696C65643A206E6F7F
:102D6C0064650A00417373657274696F6E206661E5
:102D7C00696C65643A20757365725F6D617070691A
:102D8C006E675B616464722F2831554C203C3C208B
:102D9C003132295D2E61646472203D3D20300A0081
:102DAC00417373657274696F6E206661696C6564DA
:102DBC003A2070745B315D5B616464722F2831550D
:102DCC004C203C3C203132295D2026203078303498
:102DDC00300A0000417373657274696F6E2066610E
:102DEC00696C65643A2070745B315D5B616464721C
:102DFC002F2831554C203C3C203132295D20262097
:102E0C0030783038300A0000417373657274696F22
:102E1C006E206661696C65643A2074662D3E65703F
:102E2C006320252034203D3D20300A00417373651A
:102E3C007274696F6E206661696C65643A20212238
:102E4C00696C6C6567616C20696E73747275637400
:102E5C00696F6E220A000000417373657274696FAA
:102E6C006E206661696C65643A202122756E657806
:102E7C0070656374656420657863657074696F6EE2
:102E8C00220A0000417373657274696F6E2066616B
:102E9C00696C65643A202122756E737570706F725F
:102EAC007465642073617470206D6F6465220A0010
:040000058000000077
:00000001FF

View File

@@ -1,275 +0,0 @@
:0200000480007A
:100000006F00C0006F20C0276F2080279300000082
:10001000130100009301000013020000930200008E
:100020001303000093030000130400009304000076
:10003000130500009305000013060000930600005E
:100040001307000093070000130800009308000046
:100050001309000093090000130A0000930A00002E
:10006000130B0000930B0000130C0000930C000016
:10007000130D0000930D0000130E0000930E0000FE
:10008000130F0000930F000097020000938202F804
:1000900073905230177100001301412DF32240F18B
:1000A0009392C2003301510073100134EF20103AD3
:1000B00017350000130505BA6F20D01583224508B7
:1000C0007390121483204500032185008321C5000D
:1000D0000322050183224501032385018323C501F2
:1000E00003240502832445028325C5020326050354
:1000F00083264503032785038327C50303280504B7
:1001000083284504032985048329C504032A05059A
:10011000832A4505032B8505832BC505032C05067E
:10012000832C4506032D8506832DC506032E050762
:10013000832E4507032F8507832FC50703258502D7
:1001400073002010731101142322110023263100A3
:1001500023284100232A5100232C6100232E710003
:1001600023208102232291022324A1022326B1020B
:100170002328C102232AD102232CE102232EF102DB
:1001800023200105232211052324210523263105DF
:1001900023284105232A5105232C6105232E7105AF
:1001A00023208107232291072324A1072326B107B7
:1001B0002328C107232AD107232CE107232EF10787
:1001C000F312011423245100F322001023205108BC
:1001D000F322101423225108F3223014232451084F
:1001E000F322201423265108130501006F20004735
:1010000000000000000000000000000000000000E0
:1010100000000000000000000000000000000000D0
:1010200000000000000000000000000000000000C0
:1010300000000000000000000000000000000000B0
:081040000000000000000000A8
:10200000B3E7C500B367F50093F73700B306C50023
:10201000638407023386C50093070500637ED502FB
:1020200003C705009385150093871700A38FE7FE6C
:10203000E398C5FE67800000E37ED5FE93070500A8
:1020400003A70500938747009385450023AEE7FE6D
:10205000E3E8D7FE6780000067800000B367C50033
:1020600093F737003306C5006380070293F5F50F39
:10207000930705006370C50493871700A38FB7FE0D
:10208000E31CF6FE6780000093F5F50F939785003B
:10209000B3E7B70093950701B3E5F500E374C5FE18
:1020A000930705009387470023AEB7FEE3ECC7FE16
:1020B000678000006780000083470500638E07008B
:1020C0009307050003C7170093871700E31C07FE5B
:1020D0003385A7406780000013050000678000007B
:1020E00083470500938515001305150003C7F5FF09
:1020F00063880700E386E7FE3385E74067800000DA
:10210000930700006FF05FFFB367B50093F73700E8
:10211000639E07021378C6FF330805016378050341
:10212000930705006F0000019387470093854500E2
:1021300063F8070183A6070003A70500E386E6FE10
:102140003385A7403306A640138507003386C500B4
:102150006F00400103C705008347F5FF9385150015
:10216000639AE70013051500E396C5FE130500000A
:10217000678000003385E740678000009307050013
:1021800003C705009387170093851500A38FE7FE0B
:10219000E31807FE6780000003470500930600026E
:1021A000930705006318D70003C71700938717002C
:1021B000E30CD7FE9306D0026300D7069306B00265
:1021C0006300D70483C607009305000063820604FA
:1021D0001305000093871700138606FD13172500CB
:1021E00083C607003305A700131515003305A600A5
:1021F000E39206FE638005023305A040678000007D
:1022000083C617009305000093871700E39206FC2E
:10221000130500006780000083C6170093051000B7
:1022200093871700E39606FA130500006FF09FFEF0
:1022300017F6FFFF130606DD032706008327460077
:102240009355F5413367F7006306070297F6FFFFE2
:10225000938646DF9307000023A0F60013080000D2
:1022600023A2060103270600832746003367F700F1
:10227000E31207FE2320A6002322B6006F00000011
:10228000130101FF1305903423261100EFF05FFACC
:10229000130101FE1306C1001307B10113039000DF
:1022A0006F008000138707009377F500B337F300C2
:1022B000B307F04093F777029376F500938707030F
:1022C000B387F6002300F7009396C5011355450028
:1022D0009307F7FF33E5A60093D54500E314E6FC2A
:1022E0000345C100230E01006302050693050600A5
:1022F00097F6FFFF938606D117F6FFFF130686D4E5
:1023000003A7060083A74600130805009385150060
:102310003367F700B70801016302070213070000E3
:102320002320E600930700002322F60003A70600FF
:1023300083A746003367F700E31207FE03C50500D5
:1023400023A0060123A21601E31C05FA13010102D2
:102350006780000037F6FFFF3307C500B7E70300CB
:102360006370F7149356C50093820640172300004C
:10237000130343C993972200B307F30003A7070091
:102380003375C5006306070293760704638C060E57
:1023900093760708639206189306F000639ED5169D
:1023A0001367070823A0E700730005126780000089
:1023B0001747000013074704832507006384051CA3
:1023C00083A74500174600000326C6022320F70016
:1023D0006382C70C03A7050093972200B307F3009D
:1023E0001357C7001317A700136EF70D1366F701F5
:1023F00023A0C7017300051297470000938707E0E9
:1024000093963600B386D70083A706006392071E13
:1024100083A7050023A0F60083A74500B7050400A5
:1024200023A2F600F3A50510B707C0FFB307F50018
:10243000B716000013070500B386D70083AE070068
:1024400003AE470083A8870003A8C7002320D70155
:102450002322C7012324170123260701938707019D
:1024600013070701E39CD7FC739005109397220094
:10247000B307F30023A0C700730005120F1000007C
:10248000678000001367070423A0E70073000512AC
:10249000678000009747000023AE07F46FF09FF3BA
:1024A00013051004971500009385858297F6FFFFAA
:1024B000938646B517F6FFFF1306C6B803A70600B6
:1024C00083A7460013030500938515003367F700C3
:1024D000B703010163020702930700002320F600FF
:1024E000130800002322060103A7060083A7460065
:1024F0003367F700E31207FE03C5050023A066005B
:1025000023A27600E31C05FA130101FF1305300036
:1025100023261100EFF0DFD113051004970500000A
:102520009385457F97F6FFFF9386C6AD17F6FFFFAD
:10253000130646B103A7060083A74600130E050045
:10254000938515003367F700B70E01016302070298
:10255000930700002320F600130800002322060141
:1025600003A7060083A746003367F700E31207FEC0
:1025700003C5050023A0C60123A2D601E31C05FA6A
:102580006FF09FF813051004970500009385057DF3
:1025900097F6FFFF938606A717F6FFFF130686AA96
:1025A00003A7060083A74600130F050093851500B7
:1025B0003367F700B70F01016302070293070000BA
:1025C0002320F600130800002322060103A70600BB
:1025D00083A746003367F700E31207FE03C5050033
:1025E00023A0E60123A2F601E31C05FA6FF0DFF158
:1025F00013051004970500009385C57797F6FFFF34
:10260000938646A017F6FFFF1306C6A303A706008E
:1026100083A7460013080500938515003367F7006C
:10262000B708010163020702130700002320E60038
:10263000930700002322F60003A7060083A74600A5
:102640003367F700E31207FE03C5050023A0060168
:1026500023A21601E31C05FA6FF01FEB8325C508C2
:10266000130101FB23248104232611042322910456
:1026700023202105232E3103232C4103232A510338
:10268000232861032326710323248103232291033A
:102690002320A103232EB10193078000130405001A
:1026A0006386F516930720006380F506938745FF40
:1026B000130710006376F7009307F0006392F5228A
:1026C00003258408EFF01FC91305040003248104C7
:1026D0008320C10483244104032901048329C10305
:1026E000032A8103832A4103032B0103832BC102A5
:1026F000032C8102832C4102032D0102832DC10191
:10270000130101056FD09F9B03274508937737007E
:1027100063980708EF078000731030000327070055
:1027200083A70700630AF706130510049705000046
:102730009385C57097F6FFFF9386C68C17F6FFFF4B
:102740001306469003A7060083A74600130805005A
:10275000938515003367F700B7080101630207028C
:10276000130700002320E600930700002322F60051
:1027700003A7060083A746003367F700E31207FEAE
:1027800003C5050023A0060123A21601E31C05FAD8
:1027900013053000EFF0DFA913051000EFF05FA97B
:1027A00097050000938545671306100497F6FFFF11
:1027B0009386468517F5FFFF1305C58803A7060016
:1027C00083A74600130E0600938515003367F700B4
:1027D000B70E010163020702930700002320F500F2
:1027E000130800002322050103A7060083A7460063
:1027F0003367F700E31207FE03C6050023A0C601F6
:1028000023A2D601E31C06FA6FF09FF8032B850282
:10281000371C0000974400009384449E171D00005D
:10282000130D4D7EB70C0400974B0000938B8BBCAF
:102830006F00C00123A2870023A08B00B717000000
:10284000330CFC00B7F703006302FC1C9357CC0069
:10285000139437003386840003260600E30006FE47
:102860009387074093972700B307FD0083A70700CE
:1028700013F60704630C06122326F100F3AD0C10C7
:10288000B707C0FFB305FC003716000013050C00A6
:102890002324B100EFF05F87630005028327C100A6
:1028A0008325810093F707086382070A3716000023
:1028B00013050C00EFF0CFF43384840073900D10F7
:1028C00083A70B0023200400E39607F69747000038
:1028D000938787B223A08B0023A087006FF01FF699
:1028E00093051004170600001306065897E6FFFF2D
:1028F0009386467117E5FFFF1305C57403A706000D
:1029000083A7460013830500130616003367F700FC
:10291000B703010163020702930700002320F500BB
:10292000130800002322050103A7060083A7460021
:102930003367F700E31207FE8345060023A0660015
:1029400023A27600E39C05FA6FF09FE4930710043E
:10295000170600001306064997E6FFFF9386866A6E
:1029600097E5FFFF9385056E138907001306160090
:10297000B70901016F004001930700001308000030
:1029800023A0F50023A2050103A7060083A74600A4
:102990003367F700E31207FE8347060023A02601F2
:1029A00023A23601E39207FC6FF09FDE9307100429
:1029B000170600001306C63F97E6FFFF938686645E
:1029C00097E5FFFF93850568138A07001306160035
:1029D000B70A01016F0040019307000013080000CF
:1029E00023A0F50023A2050103A7060083A7460044
:1029F0003367F700E31207FE8347060023A0460172
:102A000023A25601E39207FC6FF09FD813050B0039
:102A1000EFF01F82F32740F163920716172600009C
:102A20001306465E9357C600130101F69397A7005D
:102A3000232E1108232C8108971500009385855CAF
:102A400093E7170023A0F500B707002093D6C50031
:102A5000370700809387F70C232EF6FEB3E7E600D6
:102A600073900718F3260018639AD716130405000D
:102A70001347F7FF9307F00197020000938242018A
:102A8000F39252307310073B7390073A97D7BF7F8A
:102A90009387876B73905710F3270034B708C07F74
:102AA000B387170173900714B7B700009387071017
:102AB00073902730B7E701007390073073504030B0
:102AC0009737C07F93870754174700002326F79254
:102AD0009737C07F9387077217470000232CF79022
:102AE00037030800173700001307C751173E0000CF
:102AF000130ECE7093074000930500001303F303F9
:102B0000938888001396F50193D61700B366D60014
:102B100033866700B3C7F600330817011316C600E3
:102B2000939757002320C7002322070193F707023A
:102B300013078700B3E7F60093D51500E314EEFC06
:102B400013060009930500001305010097370000E4
:102B500023A4076AEFF08FD0B70700803304F40096
:102B60001305010023228108EFD04FD58320C1092E
:102B7000032481091301010A67800000B7B7F50F2C
:102B8000B7050800938767D2130700009385C5FF38
:102B900037080080370500406F00C0022FA00600F4
:102BA0001316F70193D61700B366D600B3C7D70044
:102BB0009397E7013376F5001357170093870600C4
:102BC0003367E600B3F6B70013F61700B3860601C5
:102BD000E31606FC03A006006FF09FFC93051004AB
:102BE000170600001306062B97E6FFFF9386864123
:102BF00017E5FFFF1305054503A7060083A7460059
:102C000013880500130616003367F700B7080101A3
:102C100063020702130700002320E500930700006A
:102C20002322F50003A7060083A746003367F700B9
:102C3000E31207FE8345060023A0060123A2160126
:102C4000E39C05FA13053000EFF08FDE678000008B
:102C50003705008093050080970600009386863A2A
:102C600023A0A6002FA7B6E0B70E00809301200096
:102C70006310D70583A70600930E008093013000F0
:102C80006398D7039305F0FF23A006002FA7B6E0B3
:102C9000930E000093014000631CD70183A7060038
:102CA000930EF0FF930150006394D701631A300034
:102CB00013951100630005001365150073000000F3
:0C2CC0001305100073000000731000C02A
:102CCC00417373657274696F6E206661696C6564BB
:102CDC003A2061646472203E3D202831554C203CE2
:102CEC003C203132292026262061646472203C204D
:102CFC003633202A202831554C203C3C20313229B7
:102D0C000A000000417373657274696F6E2066610E
:102D1C00696C65643A20212870745B315D5B616479
:102D2C0064722F2831554C203C3C203132295D20D7
:102D3C0026203078303830292026262063617573A0
:102D4C0065203D3D203078660A00000041737365B4
:102D5C007274696F6E206661696C65643A206E6F7F
:102D6C0064650A00417373657274696F6E206661E5
:102D7C00696C65643A20757365725F6D617070691A
:102D8C006E675B616464722F2831554C203C3C208B
:102D9C003132295D2E61646472203D3D20300A0081
:102DAC00417373657274696F6E206661696C6564DA
:102DBC003A2070745B315D5B616464722F2831550D
:102DCC004C203C3C203132295D2026203078303498
:102DDC00300A0000417373657274696F6E2066610E
:102DEC00696C65643A2070745B315D5B616464721C
:102DFC002F2831554C203C3C203132295D20262097
:102E0C0030783038300A0000417373657274696F22
:102E1C006E206661696C65643A2074662D3E65703F
:102E2C006320252034203D3D20300A00417373651A
:102E3C007274696F6E206661696C65643A20212238
:102E4C00696C6C6567616C20696E73747275637400
:102E5C00696F6E220A000000417373657274696FAA
:102E6C006E206661696C65643A202122756E657806
:102E7C0070656374656420657863657074696F6EE2
:102E8C00220A0000417373657274696F6E2066616B
:102E9C00696C65643A202122756E737570706F725F
:102EAC007465642073617470206D6F6465220A0010
:040000058000000077
:00000001FF

View File

@@ -1,275 +0,0 @@
:0200000480007A
:100000006F00C0006F20C0276F2080279300000082
:10001000130100009301000013020000930200008E
:100020001303000093030000130400009304000076
:10003000130500009305000013060000930600005E
:100040001307000093070000130800009308000046
:100050001309000093090000130A0000930A00002E
:10006000130B0000930B0000130C0000930C000016
:10007000130D0000930D0000130E0000930E0000FE
:10008000130F0000930F000097020000938202F804
:1000900073905230177100001301412DF32240F18B
:1000A0009392C2003301510073100134EF20103AD3
:1000B00017350000130505BA6F20D01583224508B7
:1000C0007390121483204500032185008321C5000D
:1000D0000322050183224501032385018323C501F2
:1000E00003240502832445028325C5020326050354
:1000F00083264503032785038327C50303280504B7
:1001000083284504032985048329C504032A05059A
:10011000832A4505032B8505832BC505032C05067E
:10012000832C4506032D8506832DC506032E050762
:10013000832E4507032F8507832FC50703258502D7
:1001400073002010731101142322110023263100A3
:1001500023284100232A5100232C6100232E710003
:1001600023208102232291022324A1022326B1020B
:100170002328C102232AD102232CE102232EF102DB
:1001800023200105232211052324210523263105DF
:1001900023284105232A5105232C6105232E7105AF
:1001A00023208107232291072324A1072326B107B7
:1001B0002328C107232AD107232CE107232EF10787
:1001C000F312011423245100F322001023205108BC
:1001D000F322101423225108F3223014232451084F
:1001E000F322201423265108130501006F20004735
:1010000000000000000000000000000000000000E0
:1010100000000000000000000000000000000000D0
:1010200000000000000000000000000000000000C0
:1010300000000000000000000000000000000000B0
:081040000000000000000000A8
:10200000B3E7C500B367F50093F73700B306C50023
:10201000638407023386C50093070500637ED502FB
:1020200003C705009385150093871700A38FE7FE6C
:10203000E398C5FE67800000E37ED5FE93070500A8
:1020400003A70500938747009385450023AEE7FE6D
:10205000E3E8D7FE6780000067800000B367C50033
:1020600093F737003306C5006380070293F5F50F39
:10207000930705006370C50493871700A38FB7FE0D
:10208000E31CF6FE6780000093F5F50F939785003B
:10209000B3E7B70093950701B3E5F500E374C5FE18
:1020A000930705009387470023AEB7FEE3ECC7FE16
:1020B000678000006780000083470500638E07008B
:1020C0009307050003C7170093871700E31C07FE5B
:1020D0003385A7406780000013050000678000007B
:1020E00083470500938515001305150003C7F5FF09
:1020F00063880700E386E7FE3385E74067800000DA
:10210000930700006FF05FFFB367B50093F73700E8
:10211000639E07021378C6FF330805016378050341
:10212000930705006F0000019387470093854500E2
:1021300063F8070183A6070003A70500E386E6FE10
:102140003385A7403306A640138507003386C500B4
:102150006F00400103C705008347F5FF9385150015
:10216000639AE70013051500E396C5FE130500000A
:10217000678000003385E740678000009307050013
:1021800003C705009387170093851500A38FE7FE0B
:10219000E31807FE6780000003470500930600026E
:1021A000930705006318D70003C71700938717002C
:1021B000E30CD7FE9306D0026300D7069306B00265
:1021C0006300D70483C607009305000063820604FA
:1021D0001305000093871700138606FD13172500CB
:1021E00083C607003305A700131515003305A600A5
:1021F000E39206FE638005023305A040678000007D
:1022000083C617009305000093871700E39206FC2E
:10221000130500006780000083C6170093051000B7
:1022200093871700E39606FA130500006FF09FFEF0
:1022300017F6FFFF130606DD032706008327460077
:102240009355F5413367F7006306070297F6FFFFE2
:10225000938646DF9307000023A0F60013080000D2
:1022600023A2060103270600832746003367F700F1
:10227000E31207FE2320A6002322B6006F00000011
:10228000130101FF1305903423261100EFF05FFACC
:10229000130101FE1306C1001307B10113039000DF
:1022A0006F008000138707009377F500B337F300C2
:1022B000B307F04093F777029376F500938707030F
:1022C000B387F6002300F7009396C5011355450028
:1022D0009307F7FF33E5A60093D54500E314E6FC2A
:1022E0000345C100230E01006302050693050600A5
:1022F00097F6FFFF938606D117F6FFFF130686D4E5
:1023000003A7060083A74600130805009385150060
:102310003367F700B70801016302070213070000E3
:102320002320E600930700002322F60003A70600FF
:1023300083A746003367F700E31207FE03C50500D5
:1023400023A0060123A21601E31C05FA13010102D2
:102350006780000037F6FFFF3307C500B7E70300CB
:102360006370F7149356C50093820640172300004C
:10237000130343C993972200B307F30003A7070091
:102380003375C5006306070293760704638C060E57
:1023900093760708639206189306F000639ED5169D
:1023A0001367070823A0E700730005126780000089
:1023B0001747000013074704832507006384051CA3
:1023C00083A74500174600000326C6022320F70016
:1023D0006382C70C03A7050093972200B307F3009D
:1023E0001357C7001317A700136EF70D1366F701F5
:1023F00023A0C7017300051297470000938707E0E9
:1024000093963600B386D70083A706006392071E13
:1024100083A7050023A0F60083A74500B7050400A5
:1024200023A2F600F3A50510B707C0FFB307F50018
:10243000B716000013070500B386D70083AE070068
:1024400003AE470083A8870003A8C7002320D70155
:102450002322C7012324170123260701938707019D
:1024600013070701E39CD7FC739005109397220094
:10247000B307F30023A0C700730005120F1000007C
:10248000678000001367070423A0E70073000512AC
:10249000678000009747000023AE07F46FF09FF3BA
:1024A00013051004971500009385858297F6FFFFAA
:1024B000938646B517F6FFFF1306C6B803A70600B6
:1024C00083A7460013030500938515003367F700C3
:1024D000B703010163020702930700002320F600FF
:1024E000130800002322060103A7060083A7460065
:1024F0003367F700E31207FE03C5050023A066005B
:1025000023A27600E31C05FA130101FF1305300036
:1025100023261100EFF0DFD113051004970500000A
:102520009385457F97F6FFFF9386C6AD17F6FFFFAD
:10253000130646B103A7060083A74600130E050045
:10254000938515003367F700B70E01016302070298
:10255000930700002320F600130800002322060141
:1025600003A7060083A746003367F700E31207FEC0
:1025700003C5050023A0C60123A2D601E31C05FA6A
:102580006FF09FF813051004970500009385057DF3
:1025900097F6FFFF938606A717F6FFFF130686AA96
:1025A00003A7060083A74600130F050093851500B7
:1025B0003367F700B70F01016302070293070000BA
:1025C0002320F600130800002322060103A70600BB
:1025D00083A746003367F700E31207FE03C5050033
:1025E00023A0E60123A2F601E31C05FA6FF0DFF158
:1025F00013051004970500009385C57797F6FFFF34
:10260000938646A017F6FFFF1306C6A303A706008E
:1026100083A7460013080500938515003367F7006C
:10262000B708010163020702130700002320E60038
:10263000930700002322F60003A7060083A74600A5
:102640003367F700E31207FE03C5050023A0060168
:1026500023A21601E31C05FA6FF01FEB8325C508C2
:10266000130101FB23248104232611042322910456
:1026700023202105232E3103232C4103232A510338
:10268000232861032326710323248103232291033A
:102690002320A103232EB10193078000130405001A
:1026A0006386F516930720006380F506938745FF40
:1026B000130710006376F7009307F0006392F5228A
:1026C00003258408EFF01FC91305040003248104C7
:1026D0008320C10483244104032901048329C10305
:1026E000032A8103832A4103032B0103832BC102A5
:1026F000032C8102832C4102032D0102832DC10191
:10270000130101056FD09F9B03274508937737007E
:1027100063980708EF078000731030000327070055
:1027200083A70700630AF706130510049705000046
:102730009385C57097F6FFFF9386C68C17F6FFFF4B
:102740001306469003A7060083A74600130805005A
:10275000938515003367F700B7080101630207028C
:10276000130700002320E600930700002322F60051
:1027700003A7060083A746003367F700E31207FEAE
:1027800003C5050023A0060123A21601E31C05FAD8
:1027900013053000EFF0DFA913051000EFF05FA97B
:1027A00097050000938545671306100497F6FFFF11
:1027B0009386468517F5FFFF1305C58803A7060016
:1027C00083A74600130E0600938515003367F700B4
:1027D000B70E010163020702930700002320F500F2
:1027E000130800002322050103A7060083A7460063
:1027F0003367F700E31207FE03C6050023A0C601F6
:1028000023A2D601E31C06FA6FF09FF8032B850282
:10281000371C0000974400009384449E171D00005D
:10282000130D4D7EB70C0400974B0000938B8BBCAF
:102830006F00C00123A2870023A08B00B717000000
:10284000330CFC00B7F703006302FC1C9357CC0069
:10285000139437003386840003260600E30006FE47
:102860009387074093972700B307FD0083A70700CE
:1028700013F60704630C06122326F100F3AD0C10C7
:10288000B707C0FFB305FC003716000013050C00A6
:102890002324B100EFF05F87630005028327C100A6
:1028A0008325810093F707086382070A3716000023
:1028B00013050C00EFF0CFF43384840073900D10F7
:1028C00083A70B0023200400E39607F69747000038
:1028D000938787B223A08B0023A087006FF01FF699
:1028E00093051004170600001306065897E6FFFF2D
:1028F0009386467117E5FFFF1305C57403A706000D
:1029000083A7460013830500130616003367F700FC
:10291000B703010163020702930700002320F500BB
:10292000130800002322050103A7060083A7460021
:102930003367F700E31207FE8345060023A0660015
:1029400023A27600E39C05FA6FF09FE4930710043E
:10295000170600001306064997E6FFFF9386866A6E
:1029600097E5FFFF9385056E138907001306160090
:10297000B70901016F004001930700001308000030
:1029800023A0F50023A2050103A7060083A74600A4
:102990003367F700E31207FE8347060023A02601F2
:1029A00023A23601E39207FC6FF09FDE9307100429
:1029B000170600001306C63F97E6FFFF938686645E
:1029C00097E5FFFF93850568138A07001306160035
:1029D000B70A01016F0040019307000013080000CF
:1029E00023A0F50023A2050103A7060083A7460044
:1029F0003367F700E31207FE8347060023A0460172
:102A000023A25601E39207FC6FF09FD813050B0039
:102A1000EFF01F82F32740F163920716172600009C
:102A20001306465E9357C600130101F69397A7005D
:102A3000232E1108232C8108971500009385855CAF
:102A400093E7170023A0F500B707002093D6C50031
:102A5000370700809387F70C232EF6FEB3E7E600D6
:102A600073900718F3260018639AD716130405000D
:102A70001347F7FF9307F00197020000938242018A
:102A8000F39252307310073B7390073A97D7BF7F8A
:102A90009387876B73905710F3270034B708C07F74
:102AA000B387170173900714B7B700009387071017
:102AB00073902730B7E701007390073073504030B0
:102AC0009737C07F93870754174700002326F79254
:102AD0009737C07F9387077217470000232CF79022
:102AE00037030800173700001307C751173E0000CF
:102AF000130ECE709307E003930500001303F30356
:102B0000938888001396F50193D61700B366D60014
:102B100033866700B3C7F600330817011316C600E3
:102B2000939757002320C7002322070193F707023A
:102B300013078700B3E7F60093D51500E314EEFC06
:102B400013060009930500001305010097370000E4
:102B500023A4076AEFF08FD0B70700803304F40096
:102B60001305010023228108EFD04FD58320C1092E
:102B7000032481091301010A67800000B777470029
:102B8000B7050800938767FB130700009385C5FF0F
:102B900037080080370500406F00C0022FA00600F4
:102BA0001316F70193D61700B366D600B3C7D70044
:102BB0009397E7013376F5001357170093870600C4
:102BC0003367E600B3F6B70013F61700B3860601C5
:102BD000E31606FC03A006006FF09FFC93051004AB
:102BE000170600001306062B97E6FFFF9386864123
:102BF00017E5FFFF1305054503A7060083A7460059
:102C000013880500130616003367F700B7080101A3
:102C100063020702130700002320E500930700006A
:102C20002322F50003A7060083A746003367F700B9
:102C3000E31207FE8345060023A0060123A2160126
:102C4000E39C05FA13053000EFF08FDE678000008B
:102C50003705008093050080970600009386863A2A
:102C600023A0A6002FA7B680B70E008093012000F6
:102C70006310D70583A70600B70E008093013000CC
:102C80006398D7039305F0FF23A006002FA7B68013
:102C9000930E000093014000631CD70183A7060038
:102CA000930EF0FF930150006394D701631A300034
:102CB00013951100630005001365150073000000F3
:0C2CC0001305100073000000731000C02A
:102CCC00417373657274696F6E206661696C6564BB
:102CDC003A2061646472203E3D202831554C203CE2
:102CEC003C203132292026262061646472203C204D
:102CFC003633202A202831554C203C3C20313229B7
:102D0C000A000000417373657274696F6E2066610E
:102D1C00696C65643A20212870745B315D5B616479
:102D2C0064722F2831554C203C3C203132295D20D7
:102D3C0026203078303830292026262063617573A0
:102D4C0065203D3D203078660A00000041737365B4
:102D5C007274696F6E206661696C65643A206E6F7F
:102D6C0064650A00417373657274696F6E206661E5
:102D7C00696C65643A20757365725F6D617070691A
:102D8C006E675B616464722F2831554C203C3C208B
:102D9C003132295D2E61646472203D3D20300A0081
:102DAC00417373657274696F6E206661696C6564DA
:102DBC003A2070745B315D5B616464722F2831550D
:102DCC004C203C3C203132295D2026203078303498
:102DDC00300A0000417373657274696F6E2066610E
:102DEC00696C65643A2070745B315D5B616464721C
:102DFC002F2831554C203C3C203132295D20262097
:102E0C0030783038300A0000417373657274696F22
:102E1C006E206661696C65643A2074662D3E65703F
:102E2C006320252034203D3D20300A00417373651A
:102E3C007274696F6E206661696C65643A20212238
:102E4C00696C6C6567616C20696E73747275637400
:102E5C00696F6E220A000000417373657274696FAA
:102E6C006E206661696C65643A202122756E657806
:102E7C0070656374656420657863657074696F6EE2
:102E8C00220A0000417373657274696F6E2066616B
:102E9C00696C65643A202122756E737570706F725F
:102EAC007465642073617470206D6F6465220A0010
:040000058000000077
:00000001FF

View File

@@ -1,275 +0,0 @@
:0200000480007A
:100000006F00C0006F20C0276F2080279300000082
:10001000130100009301000013020000930200008E
:100020001303000093030000130400009304000076
:10003000130500009305000013060000930600005E
:100040001307000093070000130800009308000046
:100050001309000093090000130A0000930A00002E
:10006000130B0000930B0000130C0000930C000016
:10007000130D0000930D0000130E0000930E0000FE
:10008000130F0000930F000097020000938202F804
:1000900073905230177100001301412DF32240F18B
:1000A0009392C2003301510073100134EF20103AD3
:1000B00017350000130505BA6F20D01583224508B7
:1000C0007390121483204500032185008321C5000D
:1000D0000322050183224501032385018323C501F2
:1000E00003240502832445028325C5020326050354
:1000F00083264503032785038327C50303280504B7
:1001000083284504032985048329C504032A05059A
:10011000832A4505032B8505832BC505032C05067E
:10012000832C4506032D8506832DC506032E050762
:10013000832E4507032F8507832FC50703258502D7
:1001400073002010731101142322110023263100A3
:1001500023284100232A5100232C6100232E710003
:1001600023208102232291022324A1022326B1020B
:100170002328C102232AD102232CE102232EF102DB
:1001800023200105232211052324210523263105DF
:1001900023284105232A5105232C6105232E7105AF
:1001A00023208107232291072324A1072326B107B7
:1001B0002328C107232AD107232CE107232EF10787
:1001C000F312011423245100F322001023205108BC
:1001D000F322101423225108F3223014232451084F
:1001E000F322201423265108130501006F20004735
:1010000000000000000000000000000000000000E0
:1010100000000000000000000000000000000000D0
:1010200000000000000000000000000000000000C0
:1010300000000000000000000000000000000000B0
:081040000000000000000000A8
:10200000B3E7C500B367F50093F73700B306C50023
:10201000638407023386C50093070500637ED502FB
:1020200003C705009385150093871700A38FE7FE6C
:10203000E398C5FE67800000E37ED5FE93070500A8
:1020400003A70500938747009385450023AEE7FE6D
:10205000E3E8D7FE6780000067800000B367C50033
:1020600093F737003306C5006380070293F5F50F39
:10207000930705006370C50493871700A38FB7FE0D
:10208000E31CF6FE6780000093F5F50F939785003B
:10209000B3E7B70093950701B3E5F500E374C5FE18
:1020A000930705009387470023AEB7FEE3ECC7FE16
:1020B000678000006780000083470500638E07008B
:1020C0009307050003C7170093871700E31C07FE5B
:1020D0003385A7406780000013050000678000007B
:1020E00083470500938515001305150003C7F5FF09
:1020F00063880700E386E7FE3385E74067800000DA
:10210000930700006FF05FFFB367B50093F73700E8
:10211000639E07021378C6FF330805016378050341
:10212000930705006F0000019387470093854500E2
:1021300063F8070183A6070003A70500E386E6FE10
:102140003385A7403306A640138507003386C500B4
:102150006F00400103C705008347F5FF9385150015
:10216000639AE70013051500E396C5FE130500000A
:10217000678000003385E740678000009307050013
:1021800003C705009387170093851500A38FE7FE0B
:10219000E31807FE6780000003470500930600026E
:1021A000930705006318D70003C71700938717002C
:1021B000E30CD7FE9306D0026300D7069306B00265
:1021C0006300D70483C607009305000063820604FA
:1021D0001305000093871700138606FD13172500CB
:1021E00083C607003305A700131515003305A600A5
:1021F000E39206FE638005023305A040678000007D
:1022000083C617009305000093871700E39206FC2E
:10221000130500006780000083C6170093051000B7
:1022200093871700E39606FA130500006FF09FFEF0
:1022300017F6FFFF130606DD032706008327460077
:102240009355F5413367F7006306070297F6FFFFE2
:10225000938646DF9307000023A0F60013080000D2
:1022600023A2060103270600832746003367F700F1
:10227000E31207FE2320A6002322B6006F00000011
:10228000130101FF1305903423261100EFF05FFACC
:10229000130101FE1306C1001307B10113039000DF
:1022A0006F008000138707009377F500B337F300C2
:1022B000B307F04093F777029376F500938707030F
:1022C000B387F6002300F7009396C5011355450028
:1022D0009307F7FF33E5A60093D54500E314E6FC2A
:1022E0000345C100230E01006302050693050600A5
:1022F00097F6FFFF938606D117F6FFFF130686D4E5
:1023000003A7060083A74600130805009385150060
:102310003367F700B70801016302070213070000E3
:102320002320E600930700002322F60003A70600FF
:1023300083A746003367F700E31207FE03C50500D5
:1023400023A0060123A21601E31C05FA13010102D2
:102350006780000037F6FFFF3307C500B7E70300CB
:102360006370F7149356C50093820640172300004C
:10237000130343C993972200B307F30003A7070091
:102380003375C5006306070293760704638C060E57
:1023900093760708639206189306F000639ED5169D
:1023A0001367070823A0E700730005126780000089
:1023B0001747000013074704832507006384051CA3
:1023C00083A74500174600000326C6022320F70016
:1023D0006382C70C03A7050093972200B307F3009D
:1023E0001357C7001317A700136EF70D1366F701F5
:1023F00023A0C7017300051297470000938707E0E9
:1024000093963600B386D70083A706006392071E13
:1024100083A7050023A0F60083A74500B7050400A5
:1024200023A2F600F3A50510B707C0FFB307F50018
:10243000B716000013070500B386D70083AE070068
:1024400003AE470083A8870003A8C7002320D70155
:102450002322C7012324170123260701938707019D
:1024600013070701E39CD7FC739005109397220094
:10247000B307F30023A0C700730005120F1000007C
:10248000678000001367070423A0E70073000512AC
:10249000678000009747000023AE07F46FF09FF3BA
:1024A00013051004971500009385858297F6FFFFAA
:1024B000938646B517F6FFFF1306C6B803A70600B6
:1024C00083A7460013030500938515003367F700C3
:1024D000B703010163020702930700002320F600FF
:1024E000130800002322060103A7060083A7460065
:1024F0003367F700E31207FE03C5050023A066005B
:1025000023A27600E31C05FA130101FF1305300036
:1025100023261100EFF0DFD113051004970500000A
:102520009385457F97F6FFFF9386C6AD17F6FFFFAD
:10253000130646B103A7060083A74600130E050045
:10254000938515003367F700B70E01016302070298
:10255000930700002320F600130800002322060141
:1025600003A7060083A746003367F700E31207FEC0
:1025700003C5050023A0C60123A2D601E31C05FA6A
:102580006FF09FF813051004970500009385057DF3
:1025900097F6FFFF938606A717F6FFFF130686AA96
:1025A00003A7060083A74600130F050093851500B7
:1025B0003367F700B70F01016302070293070000BA
:1025C0002320F600130800002322060103A70600BB
:1025D00083A746003367F700E31207FE03C5050033
:1025E00023A0E60123A2F601E31C05FA6FF0DFF158
:1025F00013051004970500009385C57797F6FFFF34
:10260000938646A017F6FFFF1306C6A303A706008E
:1026100083A7460013080500938515003367F7006C
:10262000B708010163020702130700002320E60038
:10263000930700002322F60003A7060083A74600A5
:102640003367F700E31207FE03C5050023A0060168
:1026500023A21601E31C05FA6FF01FEB8325C508C2
:10266000130101FB23248104232611042322910456
:1026700023202105232E3103232C4103232A510338
:10268000232861032326710323248103232291033A
:102690002320A103232EB10193078000130405001A
:1026A0006386F516930720006380F506938745FF40
:1026B000130710006376F7009307F0006392F5228A
:1026C00003258408EFF01FC91305040003248104C7
:1026D0008320C10483244104032901048329C10305
:1026E000032A8103832A4103032B0103832BC102A5
:1026F000032C8102832C4102032D0102832DC10191
:10270000130101056FD09F9B03274508937737007E
:1027100063980708EF078000731030000327070055
:1027200083A70700630AF706130510049705000046
:102730009385C57097F6FFFF9386C68C17F6FFFF4B
:102740001306469003A7060083A74600130805005A
:10275000938515003367F700B7080101630207028C
:10276000130700002320E600930700002322F60051
:1027700003A7060083A746003367F700E31207FEAE
:1027800003C5050023A0060123A21601E31C05FAD8
:1027900013053000EFF0DFA913051000EFF05FA97B
:1027A00097050000938545671306100497F6FFFF11
:1027B0009386468517F5FFFF1305C58803A7060016
:1027C00083A74600130E0600938515003367F700B4
:1027D000B70E010163020702930700002320F500F2
:1027E000130800002322050103A7060083A7460063
:1027F0003367F700E31207FE03C6050023A0C601F6
:1028000023A2D601E31C06FA6FF09FF8032B850282
:10281000371C0000974400009384449E171D00005D
:10282000130D4D7EB70C0400974B0000938B8BBCAF
:102830006F00C00123A2870023A08B00B717000000
:10284000330CFC00B7F703006302FC1C9357CC0069
:10285000139437003386840003260600E30006FE47
:102860009387074093972700B307FD0083A70700CE
:1028700013F60704630C06122326F100F3AD0C10C7
:10288000B707C0FFB305FC003716000013050C00A6
:102890002324B100EFF05F87630005028327C100A6
:1028A0008325810093F707086382070A3716000023
:1028B00013050C00EFF0CFF43384840073900D10F7
:1028C00083A70B0023200400E39607F69747000038
:1028D000938787B223A08B0023A087006FF01FF699
:1028E00093051004170600001306065897E6FFFF2D
:1028F0009386467117E5FFFF1305C57403A706000D
:1029000083A7460013830500130616003367F700FC
:10291000B703010163020702930700002320F500BB
:10292000130800002322050103A7060083A7460021
:102930003367F700E31207FE8345060023A0660015
:1029400023A27600E39C05FA6FF09FE4930710043E
:10295000170600001306064997E6FFFF9386866A6E
:1029600097E5FFFF9385056E138907001306160090
:10297000B70901016F004001930700001308000030
:1029800023A0F50023A2050103A7060083A74600A4
:102990003367F700E31207FE8347060023A02601F2
:1029A00023A23601E39207FC6FF09FDE9307100429
:1029B000170600001306C63F97E6FFFF938686645E
:1029C00097E5FFFF93850568138A07001306160035
:1029D000B70A01016F0040019307000013080000CF
:1029E00023A0F50023A2050103A7060083A7460044
:1029F0003367F700E31207FE8347060023A0460172
:102A000023A25601E39207FC6FF09FD813050B0039
:102A1000EFF01F82F32740F163920716172600009C
:102A20001306465E9357C600130101F69397A7005D
:102A3000232E1108232C8108971500009385855CAF
:102A400093E7170023A0F500B707002093D6C50031
:102A5000370700809387F70C232EF6FEB3E7E600D6
:102A600073900718F3260018639AD716130405000D
:102A70001347F7FF9307F00197020000938242018A
:102A8000F39252307310073B7390073A97D7BF7F8A
:102A90009387876B73905710F3270034B708C07F74
:102AA000B387170173900714B7B700009387071017
:102AB00073902730B7E701007390073073504030B0
:102AC0009737C07F93870754174700002326F79254
:102AD0009737C07F9387077217470000232CF79022
:102AE00037030800173700001307C751173E0000CF
:102AF000130ECE709307C000930500001303F30379
:102B0000938888001396F50193D61700B366D60014
:102B100033866700B3C7F600330817011316C600E3
:102B2000939757002320C7002322070193F707023A
:102B300013078700B3E7F60093D51500E314EEFC06
:102B400013060009930500001305010097370000E4
:102B500023A4076AEFF08FD0B70700803304F40096
:102B60001305010023228108EFD04FD58320C1092E
:102B7000032481091301010A67800000B707FA03E3
:102B8000B705080093870722130700009385C5FF48
:102B900037080080370500406F00C0022FA00600F4
:102BA0001316F70193D61700B366D600B3C7D70044
:102BB0009397E7013376F5001357170093870600C4
:102BC0003367E600B3F6B70013F61700B3860601C5
:102BD000E31606FC03A006006FF09FFC93051004AB
:102BE000170600001306062B97E6FFFF9386864123
:102BF00017E5FFFF1305054503A7060083A7460059
:102C000013880500130616003367F700B7080101A3
:102C100063020702130700002320E500930700006A
:102C20002322F50003A7060083A746003367F700B9
:102C3000E31207FE8345060023A0060123A2160126
:102C4000E39C05FA13053000EFF08FDE678000008B
:102C50003705008093050080970600009386863A2A
:102C600023A0A6002FA7B6C0B70E008093012000B6
:102C70006310D70583A70600B70E008093013000CC
:102C80006398D7039305F0FF23A006002FA7B6C0D3
:102C9000930E000093014000631CD70183A7060038
:102CA000930E0000930150006394D701631A300023
:102CB00013951100630005001365150073000000F3
:0C2CC0001305100073000000731000C02A
:102CCC00417373657274696F6E206661696C6564BB
:102CDC003A2061646472203E3D202831554C203CE2
:102CEC003C203132292026262061646472203C204D
:102CFC003633202A202831554C203C3C20313229B7
:102D0C000A000000417373657274696F6E2066610E
:102D1C00696C65643A20212870745B315D5B616479
:102D2C0064722F2831554C203C3C203132295D20D7
:102D3C0026203078303830292026262063617573A0
:102D4C0065203D3D203078660A00000041737365B4
:102D5C007274696F6E206661696C65643A206E6F7F
:102D6C0064650A00417373657274696F6E206661E5
:102D7C00696C65643A20757365725F6D617070691A
:102D8C006E675B616464722F2831554C203C3C208B
:102D9C003132295D2E61646472203D3D20300A0081
:102DAC00417373657274696F6E206661696C6564DA
:102DBC003A2070745B315D5B616464722F2831550D
:102DCC004C203C3C203132295D2026203078303498
:102DDC00300A0000417373657274696F6E2066610E
:102DEC00696C65643A2070745B315D5B616464721C
:102DFC002F2831554C203C3C203132295D20262097
:102E0C0030783038300A0000417373657274696F22
:102E1C006E206661696C65643A2074662D3E65703F
:102E2C006320252034203D3D20300A00417373651A
:102E3C007274696F6E206661696C65643A20212238
:102E4C00696C6C6567616C20696E73747275637400
:102E5C00696F6E220A000000417373657274696FAA
:102E6C006E206661696C65643A202122756E657806
:102E7C0070656374656420657863657074696F6EE2
:102E8C00220A0000417373657274696F6E2066616B
:102E9C00696C65643A202122756E737570706F725F
:102EAC007465642073617470206D6F6465220A0010
:040000058000000077
:00000001FF

Some files were not shown because too many files have changed in this diff Show More