# Makefile snippet used by emulator/vlsi/fpga backends

MODEL := Top
CXX := g++
CXXFLAGS := -O2

SBT := java -Xmx2048M -Xss8M -XX:MaxPermSize=128M -jar sbt-launch.jar

DRAMSIM_OBJS := $(patsubst %.cpp,%.o,$(wildcard $(base_dir)/dramsim2/*.cpp))
$(DRAMSIM_OBJS): %.o: %.cpp
	$(CXX) $(CXXFLAGS) -DNO_STORAGE -DNO_OUTPUT -Dmain=nomain -c -o $@ $<
$(sim_dir)/libdramsim.a: $(DRAMSIM_OBJS)
	ar rcs $@ $^

#--------------------------------------------------------------------
# Tests
#--------------------------------------------------------------------

tstdir = $(base_dir)/riscv-tests/isa
asm_p_tests = \
	rv64si-pm-ipi \
	rv64ui-pm-lrsc \
	rv64ui-p-add \
	rv64ui-p-addi \
	rv64ui-p-amoadd_d \
	rv64ui-p-amoadd_w \
	rv64ui-p-amoand_d \
	rv64ui-p-amoand_w \
	rv64ui-p-amoor_d \
	rv64ui-p-amoor_w \
	rv64ui-p-amoswap_d \
	rv64ui-p-amoswap_w \
	rv64ui-p-amomax_d \
	rv64ui-p-amomax_w \
	rv64ui-p-amomaxu_d \
	rv64ui-p-amomaxu_w \
	rv64ui-p-amomin_d \
	rv64ui-p-amomin_w \
	rv64ui-p-amominu_d \
	rv64ui-p-amominu_w \
	rv64ui-p-auipc \
	rv64ui-p-fence_i \
	rv64ui-p-sb \
	rv64ui-p-sd \
	rv64ui-p-sh \
	rv64ui-p-sw \
	rv64ui-p-addiw \
	rv64ui-p-addw \
	rv64ui-p-and \
	rv64ui-p-andi \
	rv64ui-p-beq \
	rv64ui-p-bge \
	rv64ui-p-bgeu \
	rv64ui-p-blt \
	rv64ui-p-bltu \
	rv64ui-p-bne \
	rv64ui-p-div \
	rv64ui-p-divu \
	rv64ui-p-divuw \
	rv64ui-p-divw \
	rv64ui-p-j \
	rv64ui-p-jal \
	rv64ui-p-jalr \
	rv64ui-p-jalr_j \
	rv64ui-p-jalr_r \
	rv64ui-p-lb \
	rv64ui-p-lbu \
	rv64ui-p-ld \
	rv64ui-p-lh \
	rv64ui-p-lhu \
	rv64ui-p-lui \
	rv64ui-p-lw \
	rv64ui-p-lwu \
	rv64ui-p-mul \
	rv64ui-p-mulh \
	rv64ui-p-mulhsu \
	rv64ui-p-mulhu \
	rv64ui-p-mulw \
	rv64ui-p-or \
	rv64ui-p-ori \
	rv64ui-p-rem \
	rv64ui-p-remu \
	rv64ui-p-remuw \
	rv64ui-p-remw \
	rv64ui-p-simple \
	rv64ui-p-sll \
	rv64ui-p-slli \
	rv64ui-p-slliw \
	rv64ui-p-sllw \
	rv64ui-p-slt \
	rv64ui-p-slti \
	rv64ui-p-sltiu \
	rv64ui-p-sltu \
	rv64ui-p-sra \
	rv64ui-p-srai \
	rv64ui-p-sraiw \
	rv64ui-p-sraw \
	rv64ui-p-srliw \
	rv64ui-p-srlw \
	rv64ui-p-sub \
	rv64ui-p-subw \
	rv64ui-p-xor \
	rv64ui-p-xori \
	rv64uf-p-ldst \
	rv64uf-p-move \
	rv64uf-p-fsgnj \
	rv64uf-p-fcmp \
	rv64uf-p-fcvt \
	rv64uf-p-fcvt_w \
	rv64uf-p-fadd \
	rv64uf-p-fmin \
	rv64uf-p-fmadd \
	rv64uf-p-structural \

asm_v_tests = \
	rv64ui-v-add \
	rv64ui-v-addi \
	rv64ui-v-amoadd_d \
	rv64ui-v-amoadd_w \
	rv64ui-v-amoand_d \
	rv64ui-v-amoand_w \
	rv64ui-v-amoor_d \
	rv64ui-v-amoor_w \
	rv64ui-v-amoswap_d \
	rv64ui-v-amoswap_w \
	rv64ui-v-amomax_d \
	rv64ui-v-amomax_w \
	rv64ui-v-amomaxu_d \
	rv64ui-v-amomaxu_w \
	rv64ui-v-amomin_d \
	rv64ui-v-amomin_w \
	rv64ui-v-amominu_d \
	rv64ui-v-amominu_w \
	rv64ui-v-auipc \
	rv64ui-v-fence_i \
	rv64ui-v-sb \
	rv64ui-v-sd \
	rv64ui-v-sh \
	rv64ui-v-sw \
	rv64ui-v-addiw \
	rv64ui-v-addw \
	rv64ui-v-and \
	rv64ui-v-andi \
	rv64ui-v-beq \
	rv64ui-v-bge \
	rv64ui-v-bgeu \
	rv64ui-v-blt \
	rv64ui-v-bltu \
	rv64ui-v-bne \
	rv64ui-v-div \
	rv64ui-v-divu \
	rv64ui-v-divuw \
	rv64ui-v-divw \
	rv64ui-v-j \
	rv64ui-v-jal \
	rv64ui-v-jalr \
	rv64ui-v-jalr_j \
	rv64ui-v-jalr_r \
	rv64ui-v-lb \
	rv64ui-v-lbu \
	rv64ui-v-ld \
	rv64ui-v-lh \
	rv64ui-v-lhu \
	rv64ui-v-lui \
	rv64ui-v-lw \
	rv64ui-v-lwu \
	rv64ui-v-mul \
	rv64ui-v-mulh \
	rv64ui-v-mulhsu \
	rv64ui-v-mulhu \
	rv64ui-v-mulw \
	rv64ui-v-or \
	rv64ui-v-ori \
	rv64ui-v-rem \
	rv64ui-v-remu \
	rv64ui-v-remuw \
	rv64ui-v-remw \
	rv64ui-v-sll \
	rv64ui-v-slli \
	rv64ui-v-slliw \
	rv64ui-v-sllw \
	rv64ui-v-slt \
	rv64ui-v-slti \
	rv64ui-v-sltiu \
	rv64ui-v-sltu \
	rv64ui-v-sra \
	rv64ui-v-srai \
	rv64ui-v-sraiw \
	rv64ui-v-sraw \
	rv64ui-v-srliw \
	rv64ui-v-srlw \
	rv64ui-v-sub \
	rv64ui-v-subw \
	rv64ui-v-xor \
	rv64ui-v-xori \
	rv64uf-v-ldst \
	rv64uf-v-move \
	rv64uf-v-fsgnj \
	rv64uf-v-fcmp \
	rv64uf-v-fcvt \
	rv64uf-v-fcvt_w \
	rv64uf-v-fadd \
	rv64uf-v-fmin \
	rv64uf-v-fmadd \
	rv64uf-v-structural \

vecasm_p_tests = \
	rv64uv-p-wakeup \
	rv64uv-p-fence \
	rv64uv-p-utidx \
	rv64uv-p-vmsv \
	rv64uv-p-vmvv \
	rv64uv-p-vfmvv \
	rv64uv-p-movz \
	rv64uv-p-movn \
	rv64uv-p-fmovz \
	rv64uv-p-fmovn \
	rv64uv-p-ld \
	rv64uv-p-lw \
	rv64uv-p-lwu \
	rv64uv-p-lh \
	rv64uv-p-lhu \
	rv64uv-p-lb \
	rv64uv-p-lbu \
	rv64uv-p-sd \
	rv64uv-p-sw \
	rv64uv-p-sh \
	rv64uv-p-sb \
	rv64uv-p-fld \
	rv64uv-p-flw \
	rv64uv-p-fsd \
	rv64uv-p-fsw \
	rv64uv-p-fcvt \
	rv64uv-p-vvadd_d \
	rv64uv-p-vvadd_fw \
	rv64uv-p-vvadd_fd \
	rv64uv-p-vvadd_w \
	rv64uv-p-vvmul_d \
	rv64uv-p-amoadd_d \
	rv64uv-p-amoswap_d \
	rv64uv-p-amoand_d \
	rv64uv-p-amoor_d \
	rv64uv-p-amomax_d \
	rv64uv-p-amomin_d \
	rv64uv-p-amomaxu_d \
	rv64uv-p-amominu_d \
	rv64uv-p-amoadd_w \
	rv64uv-p-amoswap_w \
	rv64uv-p-amoand_w \
	rv64uv-p-amoor_w \
	rv64uv-p-amomax_w \
	rv64uv-p-amomin_w \
	rv64uv-p-amomaxu_w \
	rv64uv-p-amominu_w \
	rv64uv-p-imul \
	rv64uv-p-fma \
	rv64ui-p-vec-mul \
	rv64ui-p-vec-mulw \
	rv64ui-p-vec-mulh \
	rv64ui-p-vec-mulhu \
	rv64ui-p-vec-mulhsu \
	rv64ui-p-vec-addi \
	rv64ui-p-vec-add \
	rv64ui-p-vec-addiw \
	rv64ui-p-vec-addw \
	rv64ui-p-vec-and \
	rv64ui-p-vec-andi \
	rv64ui-p-vec-lui \
	rv64ui-p-vec-or \
	rv64ui-p-vec-ori \
	rv64ui-p-vec-slt \
	rv64ui-p-vec-sltu \
	rv64ui-p-vec-slti \
	rv64ui-p-vec-sltiu \
	rv64ui-p-vec-slli \
	rv64ui-p-vec-sll \
	rv64ui-p-vec-slliw \
	rv64ui-p-vec-sllw \
	rv64ui-p-vec-srai \
	rv64ui-p-vec-sra \
	rv64ui-p-vec-sraiw \
	rv64ui-p-vec-sraw \
	rv64ui-p-vec-srli \
	rv64ui-p-vec-srl \
	rv64ui-p-vec-srliw \
	rv64ui-p-vec-srlw \
	rv64ui-p-vec-sub \
	rv64ui-p-vec-subw \
	rv64ui-p-vec-xor \
	rv64ui-p-vec-xori \
	rv64uf-p-vec-fadd \
	rv64uf-p-vec-fsgnj \
	rv64uf-p-vec-fmin \
	rv64uf-p-vec-fmadd \
	rv64uf-p-vec-fcvt_w \
	rv64uf-p-vec-fcvt \
	rv64uf-p-vec-fcmp \
	rv64sv-p-illegal_tvec_cmd \
	rv64sv-p-illegal_tvec_regid \
	rv64sv-p-illegal_vt_inst \
	rv64sv-p-illegal_vt_regid \
	rv64sv-p-ma_utld \
	rv64sv-p-ma_utsd \
	rv64sv-p-ma_vld \
	rv64sv-p-ma_vsd \
	rv64sv-p-ma_vt_inst \

vecasm_v_tests = \
	rv64uv-v-wakeup \
	rv64uv-v-fence \
	rv64uv-v-utidx \
	rv64uv-v-vmsv \
	rv64uv-v-vmvv \
	rv64uv-v-vfmvv \
	rv64uv-v-movz \
	rv64uv-v-movn \
	rv64uv-v-fmovz \
	rv64uv-v-fmovn \
	rv64uv-v-ld \
	rv64uv-v-lw \
	rv64uv-v-lwu \
	rv64uv-v-lh \
	rv64uv-v-lhu \
	rv64uv-v-lb \
	rv64uv-v-lbu \
	rv64uv-v-sd \
	rv64uv-v-sw \
	rv64uv-v-sh \
	rv64uv-v-sb \
	rv64uv-v-fld \
	rv64uv-v-flw \
	rv64uv-v-fsd \
	rv64uv-v-fsw \
	rv64uv-v-fcvt \
	rv64uv-v-vvadd_d \
	rv64uv-v-vvadd_fw \
	rv64uv-v-vvadd_fd \
	rv64uv-v-vvadd_w \
	rv64uv-v-vvmul_d \
	rv64uv-v-amoadd_d \
	rv64uv-v-amoswap_d \
	rv64uv-v-amoand_d \
	rv64uv-v-amoor_d \
	rv64uv-v-amomax_d \
	rv64uv-v-amomin_d \
	rv64uv-v-amomaxu_d \
	rv64uv-v-amominu_d \
	rv64uv-v-amoadd_w \
	rv64uv-v-amoswap_w \
	rv64uv-v-amoand_w \
	rv64uv-v-amoor_w \
	rv64uv-v-amomax_w \
	rv64uv-v-amomin_w \
	rv64uv-v-amomaxu_w \
	rv64uv-v-amominu_w \
	rv64uv-v-imul \
	rv64uv-v-fma \
	rv64ui-v-vec-mul \
	rv64ui-v-vec-mulw \
	rv64ui-v-vec-mulh \
	rv64ui-v-vec-mulhu \
	rv64ui-v-vec-mulhsu \
	rv64ui-v-vec-addi \
	rv64ui-v-vec-add \
	rv64ui-v-vec-addiw \
	rv64ui-v-vec-addw \
	rv64ui-v-vec-and \
	rv64ui-v-vec-andi \
	rv64ui-v-vec-lui \
	rv64ui-v-vec-or \
	rv64ui-v-vec-ori \
	rv64ui-v-vec-slt \
	rv64ui-v-vec-sltu \
	rv64ui-v-vec-slti \
	rv64ui-v-vec-sltiu \
	rv64ui-v-vec-slli \
	rv64ui-v-vec-sll \
	rv64ui-v-vec-slliw \
	rv64ui-v-vec-sllw \
	rv64ui-v-vec-srai \
	rv64ui-v-vec-sra \
	rv64ui-v-vec-sraiw \
	rv64ui-v-vec-sraw \
	rv64ui-v-vec-srli \
	rv64ui-v-vec-srl \
	rv64ui-v-vec-srliw \
	rv64ui-v-vec-srlw \
	rv64ui-v-vec-sub \
	rv64ui-v-vec-subw \
	rv64ui-v-vec-xor \
	rv64ui-v-vec-xori \
	rv64uf-v-vec-fadd \
	rv64uf-v-vec-fsgnj \
	rv64uf-v-vec-fmin \
	rv64uf-v-vec-fmadd \
	rv64uf-v-vec-fcvt_w \
	rv64uf-v-vec-fcvt \
	rv64uf-v-vec-fcmp \

vecasm_pt_tests = \
	rv64uv-pt-wakeup \
	rv64uv-pt-fence \
	rv64uv-pt-vvadd_d \
	rv64uv-pt-vvadd_fw \
	rv64uv-pt-vvadd_fd \
	rv64uv-pt-vvadd_w \
	rv64uv-pt-vvmul_d \
	rv64uv-pt-fcvt \
	rv64uv-pt-utidx \
	rv64uv-pt-vmvv \
	rv64uv-pt-vmsv \
	rv64uv-pt-vfmvv \
	rv64uv-pt-movz \
	rv64uv-pt-movn \
	rv64uv-pt-fmovz \
	rv64uv-pt-fmovn \
	rv64uv-pt-ld \
	rv64uv-pt-lw \
	rv64uv-pt-lwu \
	rv64uv-pt-lh \
	rv64uv-pt-lhu \
	rv64uv-pt-lb \
	rv64uv-pt-lbu \
	rv64uv-pt-sd \
	rv64uv-pt-sw \
	rv64uv-pt-sh \
	rv64uv-pt-sb \
	rv64uv-pt-fld \
	rv64uv-pt-flw \
	rv64uv-pt-fsd \
	rv64uv-pt-fsw \
	rv64uv-pt-amoadd_d \
	rv64uv-pt-amoswap_d \
	rv64uv-pt-amoand_d \
	rv64uv-pt-amoor_d \
	rv64uv-pt-amomax_d \
	rv64uv-pt-amomin_d \
	rv64uv-pt-amomaxu_d \
	rv64uv-pt-amominu_d \
	rv64uv-pt-amoadd_w \
	rv64uv-pt-amoswap_w \
	rv64uv-pt-amoand_w \
	rv64uv-pt-amoor_w \
	rv64uv-pt-amomax_w \
	rv64uv-pt-amomin_w \
	rv64uv-pt-amomaxu_w \
	rv64uv-pt-amominu_w \
	rv64uv-pt-imul \
	rv64uv-pt-fma \
	rv64ui-pt-vec-mul \
	rv64ui-pt-vec-mulw \
	rv64ui-pt-vec-mulh \
	rv64ui-pt-vec-mulhu \
	rv64ui-pt-vec-mulhsu \
	rv64ui-pt-vec-addi \
	rv64ui-pt-vec-add \
	rv64ui-pt-vec-addiw \
	rv64ui-pt-vec-addw \
	rv64ui-pt-vec-and \
	rv64ui-pt-vec-andi \
	rv64ui-pt-vec-lui \
	rv64ui-pt-vec-or \
	rv64ui-pt-vec-ori \
	rv64ui-pt-vec-slt \
	rv64ui-pt-vec-sltu \
	rv64ui-pt-vec-slti \
	rv64ui-pt-vec-sltiu \
	rv64ui-pt-vec-slli \
	rv64ui-pt-vec-sll \
	rv64ui-pt-vec-slliw \
	rv64ui-pt-vec-sllw \
	rv64ui-pt-vec-srai \
	rv64ui-pt-vec-sra \
	rv64ui-pt-vec-sraiw \
	rv64ui-pt-vec-sraw \
	rv64ui-pt-vec-srli \
	rv64ui-pt-vec-srl \
	rv64ui-pt-vec-srliw \
	rv64ui-pt-vec-srlw \
	rv64ui-pt-vec-sub \
	rv64ui-pt-vec-subw \
	rv64ui-pt-vec-xor \
	rv64ui-pt-vec-xori \
	rv64uf-pt-vec-fadd \
	rv64uf-pt-vec-fsgnj \
	rv64uf-pt-vec-fmin \
	rv64uf-pt-vec-fmadd \
	rv64uf-pt-vec-fcvt_w \
	rv64uf-pt-vec-fcvt \
	rv64uf-pt-vec-fcmp \

# Globally installed benchmarks

bmarkdir = $(base_dir)/riscv-tests/benchmarks
bmarks = \
	median.riscv \
	multiply.riscv \
	qsort.riscv \
	towers.riscv \
	vvadd.riscv \
	dgemm.riscv \
	dhrystone.riscv \
	spmv.riscv \
	vec-vvadd.riscv \
	vec-cmplxmult.riscv \
	vec-matmul.riscv \
	mt-vvadd.riscv \
	mt-matmul.riscv \

vec_bmarkdir = $(base_dir)/../../riscv-app/misc/build
vec_bmarks = \
	ubmark-vvadd \
	ubmark-bin-search \
	ubmark-cmplx-mult \
	ubmark-masked-filter \


mt_bmarkdir = $(base_dir)/riscv-tests/mt
mt_bmarks = \
ab_matmul.riscv\
ab_vvadd.riscv\
ad_matmul.riscv\
ad_vvadd.riscv\
ae_matmul.riscv\
ae_vvadd.riscv\
af_matmul.riscv\
af_vvadd.riscv\
ag_matmul.riscv\
ag_vvadd.riscv\
ai_matmul.riscv\
ai_vvadd.riscv\
aj_vvadd.riscv\
ak_matmul.riscv\
ak_vvadd.riscv\
al_matmul.riscv\
al_vvadd.riscv\
am_matmul.riscv\
am_vvadd.riscv\
an_matmul.riscv\
ap_matmul.riscv\
ap_vvadd.riscv\
aq_matmul.riscv\
aq_vvadd.riscv\
ar_matmul.riscv\
ar_vvadd.riscv\
as_matmul.riscv\
as_vvadd.riscv\
at_matmul.riscv\
at_vvadd.riscv\
av_matmul.riscv\
av_vvadd.riscv\
ay_matmul.riscv\
ay_vvadd.riscv\
az_matmul.riscv\
az_vvadd.riscv\
ba_matmul.riscv\
ba_vvadd.riscv\
bb_matmul.riscv\
bb_vvadd.riscv\
bc_matmul.riscv\
bc_vvadd.riscv\
be_matmul.riscv\
be_vvadd.riscv\
bf_matmul.riscv\
bf_vvadd.riscv\
bh_matmul.riscv\
bh_vvadd.riscv\
bj_matmul.riscv\
bj_vvadd.riscv\
bk_matmul.riscv\
bk_vvadd.riscv\
bm_matmul.riscv\
bm_vvadd.riscv\
bn_matmul.riscv\
bn_vvadd.riscv\
bo_matmul.riscv\
bo_vvadd.riscv\
bp_matmul.riscv\
bp_vvadd.riscv\
br_matmul.riscv\
br_vvadd.riscv\
bs_matmul.riscv\
bs_vvadd.riscv\
bt_matmul.riscv\
bt_vvadd.riscv\