diff --git a/.github/actions/build/entrypoint.sh b/.github/actions/build/entrypoint.sh
index c99586cf..45ee168d 100755
--- a/.github/actions/build/entrypoint.sh
+++ b/.github/actions/build/entrypoint.sh
@@ -2,7 +2,7 @@
set -x
-source "/usr/share/miniconda/etc/profile.d/conda.sh"
+source $CONDA/etc/profile.d/conda.sh
conda activate riscv_perf_model
echo "Starting Build Entry"
@@ -23,7 +23,7 @@ echo "Building Sparta Infra"
cd ${GITHUB_WORKSPACE}/map/sparta
mkdir -p release
cd release
-CC=$COMPILER CXX=$CXX_COMPILER cmake .. -DCMAKE_BUILD_TYPE=$OLYMPIA_BUILD_TYPE -DGEN_DEBUG_INFO=OFF -DCMAKE_INSTALL_PREFIX=${CONDA_PREFIX}
+CC=$COMPILER CXX=$CXX_COMPILER cmake .. -DCMAKE_BUILD_TYPE=Release -DGEN_DEBUG_INFO=OFF -DCMAKE_INSTALL_PREFIX=${CONDA_PREFIX}
if [ $? -ne 0 ]; then
echo "ERROR: Cmake for Sparta framework failed"
exit 1
diff --git a/.github/workflows/conda/macos_env.yml b/.github/workflows/conda/macos_env.yml
new file mode 100644
index 00000000..4893d8dc
--- /dev/null
+++ b/.github/workflows/conda/macos_env.yml
@@ -0,0 +1,183 @@
+name: riscv_perf_model
+channels:
+ - conda-forge
+dependencies:
+ - atk-1.*
+ - backcall=0.2.*
+ - backports=1.*
+ - backports.functools_lru_cache=1.6.*
+ - binutils_impl_linux-64=2.*
+ - bison=3.*
+ - boost=1.78.*
+ - boost-cpp=1.78.*
+ - brotli=1.0.*
+ - brotli-bin=1.0.*
+ - brotlipy=0.7.*
+ - bzip2=1.0.*
+ - ca-certificates=2022.12.*
+ - cairo=1.16.*
+ - c-ares=1.18.*
+ - cctools_osx-64=973.0.*
+ - certifi=2022.12.*
+ - cffi=1.15.*
+ - charset-normalizer=2.1.*
+ - clang=14.0.*
+ - clang-14=14.0.*
+ - clang_osx-64=14.0.*
+ - clangxx=14.0.*
+ - clangxx_osx-64=14.0.*
+ - cmake=3.25.*
+ - compiler-rt=14.0.*
+ - compiler-rt_linux-64=14.0.*
+ - compiler-rt_osx-64=14.0.*
+ - contourpy=1.0.*
+ - cppcheck=2.7.*
+ - cryptography=39.0.*
+ - cycler=0.11.*
+ - cython=0.29.*
+ - decorator=5.1.*
+ - doxygen=1.9.*
+ - executing=1.2.*
+ - expat=2.5.*
+ - fontconfig=2.14.*
+ - fonts-conda-ecosystem
+ - fonts-conda-forge
+ - fonttools=4.38.*
+ - font-ttf-dejavu-sans-mono=2.*
+ - font-ttf-inconsolata=3.*
+ - font-ttf-source-code-pro=2.*
+ - font-ttf-ubuntu=0.*
+ - freetype=2.12.*
+ - fribidi=1.0.*
+ - gdk-pixbuf=2.42.*
+ - gettext=0.21.*
+ - glib=2.74.*
+ - glib-tools=2.74.*
+ - gmp=6.2.*
+ - graphite2=1.3.*
+ - gst-plugins-base=1.22.*
+ - gstreamer=1.22.*
+ - gtk2=2.24.*
+ - harfbuzz=5.3.*
+ - hdf5=1.12.*
+ - icu=70.*
+ - idna=3.*
+ - ipython=8.10.*
+ - jedi=0.18.*
+ - jpeg
+ - kernel-headers_linux-64=2.6.*
+ - kiwisolver=1.4.*
+ - krb5=1.20.*
+ - lcms2=2.*
+ - ld64_osx-64
+ - ld_impl_linux-64=2.*
+ - lerc=4.0.*
+ - libaec=1.0.*
+ - libblas=3.9.*
+ - libbrotlicommon=1.0.*
+ - libbrotlidec=1.0.*
+ - libbrotlienc=1.0.*
+ - libcblas=3.9.*
+ - libclang-cpp14=14.0.*
+ - libcurl=7.88.*
+ - libcxx=14.0.*
+ - libdeflate=1.*
+ - libedit=3.1.*
+ - libev=4.*
+ - libffi=3.4.*
+ - _libgcc_mutex=0.*
+ - libglib=2.74.*
+ - libiconv=1.*
+ - liblapack=3.9.*
+ - libllvm14=14.0.*
+ - libnghttp2=1.51.*
+ - libogg=1.3.*
+ - libopenblas=0.3.*
+ - libopus=1.3.*
+ - libpng=1.6.*
+ - libsqlite=3.40.*
+ - libssh2=1.10.*
+ - libtiff=4.5.*
+ - libuuid=2.32.*
+ - libuv=1.44.*
+ - libvorbis=1.3.*
+ - libwebp-base=1.2.*
+ - libxcb=1.*
+ - libxml2=2.10.*
+ - libzlib=1.2.*
+ - lld=15.0.7
+ - llvm-openmp=15.0.*
+ - llvm-tools=14.0.*
+ - lz4-c=1.9.*
+ - make=4.*
+ - matplotlib-base=3.7.*
+ - matplotlib-inline=0.1.*
+ - mpfr=4.1.*
+ - munkres=1.1.*
+ - ncurses=6.*
+ - numpy=1.21.*
+ - openjpeg=2.5.*
+ - openssl=3.0.*
+ - packaging=23.*
+ - pango=1.50.*
+ - parso=0.8.*
+ - pathlib2
+ - pcre2=10.*
+ - pcre=8.*
+ - pexpect=4.8.*
+ - pickleshare=0.7.*
+ - pillow=9.4.*
+ - pip=23.0.*
+ - pixman=0.40.*
+ - popt=1.*
+ - prompt-toolkit=3.0.*
+ - pthread-stubs=0.*
+ - ptyprocess=0.7.*
+ - pure_eval=0.2.*
+ - pycparser=2.*
+ - pygments=2.11.*
+ - pyopenssl=23.0.*
+ - pyparsing=3.0.*
+ - pysocks=1.7.*
+ - python=3.10.*
+ - python_abi=3.*
+ - python-dateutil=2.8.*
+ - pyyaml=6.*
+ - rapidjson=1.1.*
+ - readline=8.1.*
+ - requests=2.28.*
+ - rhash=1.4.*
+ - rsync=3.2.*
+ - setuptools=67.4.*
+ - sigtool=0.1.*
+ - six=1.16.*
+ - sqlite=3.40.*
+ - stack_data=0.6.*
+ - sysroot_linux-64=2.*
+ - tapi=1100.0.*
+ - texlive-core
+ - tk=8.6.*
+ - traitlets=5.9.*
+ - tzdata
+ - unicodedata2=15.0.*
+ - urllib3=1.26.*
+ - wcwidth=0.2.*
+ - wheel=0.38.*
+ - wxpython=4.2.*
+ - xorg-kbproto=1.0.*
+ - xorg-libice=1.0.*
+ - xorg-libsm=1.2.*
+ - xorg-libx11=1.7.*
+ - xorg-libxau=1.0.*
+ - xorg-libxdmcp=1.1.*
+ - xorg-libxext=1.3.*
+ - xorg-libxrender=0.9.*
+ - xorg-renderproto=0.11.*
+ - xorg-xextproto=7.3.*
+ - xorg-xproto=7.0.*
+ - xxhash=0.8.*
+ - xz=5.2.*
+ - yaml=0.2.*
+ - yaml-cpp=0.7.*
+ - zlib=1.2.*
+ - zstd=1.5.*
diff --git a/.github/workflows/macos-build.yml b/.github/workflows/macos-build.yml
new file mode 100644
index 00000000..4c3ef2da
--- /dev/null
+++ b/.github/workflows/macos-build.yml
@@ -0,0 +1,89 @@
+on:
+ pull_request:
+ branches:
+ - master
+
+env:
+ CACHE_VERSION: v1
+
+name: Regress Olympia on MacOS
+jobs:
+ build_test_job:
+ strategy:
+ # Strategy is a matrix of debug and release builds/regression
+ matrix:
+ os: [macos-12]
+ BUILD_TYPE: [Debug]
+ COMPILER: [clang]
+
+ name: MacOS-${{ matrix.BUILD_TYPE }}-${{matrix.COMPILER}}
+ runs-on: ${{ matrix.os }}
+
+ # Set up a global environment variable for build scripts
+ env:
+ OLYMPIA_BUILD_TYPE: ${{ matrix.BUILD_TYPE }}
+ COMPILER: ${{ matrix.COMPILER }}
+
+ steps:
+
+ # Get Olympia
+ - name: Checkout Olympia
+ uses: actions/checkout@v3
+ with:
+ submodules: recursive
+
+ # Get Sparta
+ - name: Checkout Sparta
+ uses: actions/checkout@v3
+ with:
+ repository: sparcians/map
+ path: map
+ ref: map_v2.0.13
+
+ # Setup Conda and build environment
+ - name: Grab Python v3.8
+ uses: actions/setup-python@v3
+ with:
+ python-version: 3.8
+
+ # Cache the conda dependencies to
+ - name: Cache conda deps
+ uses: actions/cache@v3
+ with:
+ key: ${{ matrix.os }}-${{ matrix.BUILD_TYPE }}-${{ matrix.COMPILER }}-conda-${{ hashFiles('.github/workflows/conda/macos_env.yml') }}
+ path: /usr/share/miniconda/envs/riscv_perf_model # Default path for conda
+
+ # Setup CCache to cache builds
+ - name: ccache
+ uses: hendrikmuhs/ccache-action@v1.2
+ with:
+ key: ${{ matrix.os }}-${{ matrix.BUILD_TYPE }}-${{ matrix.COMPILER }}-ccache-${{ github.ref_name }}
+ restore-keys: |
+ ${{ matrix.os }}-${{ matrix.BUILD_TYPE }}-${{ matrix.COMPILER }}-ccache-master
+ ${{ matrix.os }}-${{ matrix.BUILD_TYPE }}-${{ matrix.COMPILER }}-ccache
+
+ - name: Setup Conda Environment
+ uses: conda-incubator/setup-miniconda@v2
+ with:
+ miniforge-variant: Mambaforge
+ channels: conda-forge,defaults
+ channel-priority: true
+ activate-environment: riscv_perf_model
+ environment-file: .github/workflows/conda/macos_env.yml
+
+ # Build
+ - name: Build & Regress
+ run: ./.github/actions/build/entrypoint.sh
+
+ # Save error logs, etc
+ - name: Save artifacts
+ if: failure()
+ uses: actions/upload-artifact@main
+ with:
+ name: ErrorLogs-${{matrix.BUILD_TYPE}}-${{matrix.COMPILER}}
+ path: ${{matrix.BUILD_TYPE}}/test/
+
+ #- name: CTest
+ # # Run CTests without Valgrind tests otherwise the runtime will be TOO long
+ # if: ${{ env.DABBLE_BUILD_TYPE == 'release' }} && ${{ env.VALGRIND == 'false' }}
+ # uses: ./.github/actions/ctest # Uses an action.yml in directory
diff --git a/.gitmodules b/.gitmodules
index 47909a15..1587bd6c 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -4,3 +4,6 @@
[submodule "stf_lib"]
path = stf_lib
url = https://github.com/sparcians/stf_lib.git
+[submodule "fsl"]
+ path = fsl
+ url = https://github.com/Condor-Performance-Modeling/fsl
diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 00000000..13566b81
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,8 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Editor-based HTTP Client requests
+/httpRequests/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml
new file mode 100644
index 00000000..7b6888de
--- /dev/null
+++ b/.idea/codeStyles/Project.xml
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml
new file mode 100644
index 00000000..79ee123c
--- /dev/null
+++ b/.idea/codeStyles/codeStyleConfig.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/editor.xml b/.idea/editor.xml
new file mode 100644
index 00000000..adc7cfa7
--- /dev/null
+++ b/.idea/editor.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 00000000..8e9eec95
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 00000000..5f64bbe2
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/riscv-perf-model.iml b/.idea/riscv-perf-model.iml
new file mode 100644
index 00000000..f08604bb
--- /dev/null
+++ b/.idea/riscv-perf-model.iml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 00000000..df7835b2
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/CMakeLists.txt b/CMakeLists.txt
index bee99e2c..b106725b 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -35,12 +35,14 @@ include_directories(${SPARTA_INCLUDE_DIRS})
# Set up STF library
set (STF_LIB_BASE ${PROJECT_SOURCE_DIR}/stf_lib)
set (DISABLE_STF_DOXYGEN ON)
+set (DISABLE_STF_TESTS ON)
if (CMAKE_BUILD_TYPE MATCHES "^[Rr]elease")
set (FULL_LTO true)
- include(${STF_LIB_BASE}/cmake/stf_linker_setup.cmake)
- setup_stf_linker(false)
endif()
+include(${STF_LIB_BASE}/cmake/stf_linker_setup.cmake)
+setup_stf_linker(false)
+
# Use ccache if installed
find_program (CCACHE_PROGRAM ccache)
@@ -60,14 +62,20 @@ set(CMAKE_CXX_FLAGS_DEBUG "-O0 -g")
# Include directories
include_directories (core mss sim)
+include_directories (SYSTEM fsl)
include_directories (SYSTEM mavis)
include_directories (SYSTEM stf_lib)
-# Mavis, the Core, MSS, and the simulator
+# Mavis, the Core, MSS, the simulator and Fusion
+
add_subdirectory (mavis)
add_subdirectory (core)
add_subdirectory (mss)
+# Tell FSL to use the top mavis submodule, instead of fsl's submodule
+set(FSL_MAVIS_PATH "${CMAKE_CURRENT_SOURCE_DIR}/mavis")
+add_subdirectory (fsl)
+
# Add STF library to the build
add_subdirectory (${STF_LIB_BASE})
diff --git a/arches/big_core.yaml b/arches/big_core.yaml
index a6a6a656..37566b97 100644
--- a/arches/big_core.yaml
+++ b/arches/big_core.yaml
@@ -11,6 +11,7 @@ top.cpu.core0:
rename.params.num_to_rename: 8
rename.params.num_integer_renames: 64
rename.params.num_float_renames: 64
+ rename.params.num_vector_renames: 64
dispatch.params.num_to_dispatch: 8
rob.params.num_to_retire: 8
dcache.params:
@@ -23,7 +24,7 @@ top.cpu.core0.extension.core_extensions:
# targets of: "int" and "div"
pipelines:
[
- ["int"], # exe0
+ ["sys"], # exe0
["int", "div"], # exe1
["int", "mul"], # exe2
["int", "mul", "i2f", "cmov"], # exe3
@@ -32,7 +33,8 @@ top.cpu.core0.extension.core_extensions:
["float", "faddsub", "fmac"], # exe6
["float", "f2i"], # exe7
["br"], # exe8
- ["br"] # exe9
+ ["br"], # exe9
+ ["vint", "vset", "vdiv", "vmul"]
]
# this is used to set how many units per queue
# ["0", "3"] means iq0 has exe0, exe1, exe2, and exe3, so it's inclusive
@@ -47,25 +49,37 @@ top.cpu.core0.extension.core_extensions:
["2", "3"], # iq1 -> exe2, exe3
["4", "5"], # iq2 -> exe4, exe5
["6", "7"], # iq3 -> exe6, exe7
- ["8", "9"] # iq4 -> exe8, exe9
+ ["8", "9"], # iq4 -> exe8, exe9
+ ["10"] # iq5 -> exe10
]
top.cpu.core0.rename.scoreboards:
# From
# |
# V
integer.params.latency_matrix: |
- [["", "lsu", "iq0", "iq1", "iq2", "iq3", "iq4"],
- ["lsu", 1, 1, 1, 1, 1, 1],
- ["iq0", 1, 1, 1, 1, 1, 1],
- ["iq1", 1, 1, 1, 1, 1, 1],
- ["iq2", 1, 1, 1, 1, 1, 1],
- ["iq3", 1, 1, 1, 1, 1, 1],
- ["iq4", 1, 1, 1, 1, 1, 1]]
+ [["", "lsu", "iq0", "iq1", "iq2", "iq3", "iq4", "iq5"],
+ ["lsu", 1, 1, 1, 1, 1, 1, 1],
+ ["iq0", 1, 1, 1, 1, 1, 1, 1],
+ ["iq1", 1, 1, 1, 1, 1, 1, 1],
+ ["iq2", 1, 1, 1, 1, 1, 1, 1],
+ ["iq3", 1, 1, 1, 1, 1, 1, 1],
+ ["iq4", 1, 1, 1, 1, 1, 1, 1],
+ ["iq5", 1, 1, 1, 1, 1, 1, 1]]
float.params.latency_matrix: |
- [["", "lsu", "iq0", "iq1", "iq2", "iq3", "iq4"],
- ["lsu", 1, 1, 1, 1, 1, 1],
- ["iq0", 1, 1, 1, 1, 1, 1],
- ["iq1", 1, 1, 1, 1, 1, 1],
- ["iq2", 1, 1, 1, 1, 1, 1],
- ["iq3", 1, 1, 1, 1, 1, 1],
- ["iq4", 1, 1, 1, 1, 1, 1]]
\ No newline at end of file
+ [["", "lsu", "iq0", "iq1", "iq2", "iq3", "iq4", "iq5"],
+ ["lsu", 1, 1, 1, 1, 1, 1, 1],
+ ["iq0", 1, 1, 1, 1, 1, 1, 1],
+ ["iq1", 1, 1, 1, 1, 1, 1, 1],
+ ["iq2", 1, 1, 1, 1, 1, 1, 1],
+ ["iq3", 1, 1, 1, 1, 1, 1, 1],
+ ["iq4", 1, 1, 1, 1, 1, 1, 1],
+ ["iq5", 1, 1, 1, 1, 1, 1, 1]]
+ vector.params.latency_matrix: |
+ [["", "lsu", "iq0", "iq1", "iq2", "iq3", "iq4", "iq5"],
+ ["lsu", 1, 1, 1, 1, 1, 1, 1],
+ ["iq0", 1, 1, 1, 1, 1, 1, 1],
+ ["iq1", 1, 1, 1, 1, 1, 1, 1],
+ ["iq2", 1, 1, 1, 1, 1, 1, 1],
+ ["iq3", 1, 1, 1, 1, 1, 1, 1],
+ ["iq4", 1, 1, 1, 1, 1, 1, 1],
+ ["iq5", 1, 1, 1, 1, 1, 1, 1]]
diff --git a/arches/fusion.yaml b/arches/fusion.yaml
new file mode 100644
index 00000000..d944d6e9
--- /dev/null
+++ b/arches/fusion.yaml
@@ -0,0 +1,13 @@
+include: big_core.yaml
+top.cpu.core0:
+ decode:
+ params:
+ num_to_decode: 8
+ fusion_enable: false
+ fusion_debug: false
+ fusion_enable_register: 0xFFFFFFFF
+ fusion_max_latency: 8
+ fusion_match_max_tries: 1023
+ fusion_max_group_size: 8
+ fusion_summary_report: fusion_summary.txt
+ fusion_group_definitions: [ arches/fusion/dhrystone.json ]
diff --git a/arches/fusion/dhrystone.json b/arches/fusion/dhrystone.json
new file mode 100644
index 00000000..3672f241
--- /dev/null
+++ b/arches/fusion/dhrystone.json
@@ -0,0 +1,37 @@
+{
+ "fusiongroups" : [
+ { "name" : "uf039", "uids" : ["0xd","0xa"], "tx" : "dfltXform_" },
+ { "name" : "uf038", "uids" : ["0x3","0xe"], "tx" : "dfltXform_" },
+ { "name" : "uf037", "uids" : ["0x20","0x4"], "tx" : "dfltXform_" },
+ { "name" : "uf036", "uids" : ["0x9","0x2d"], "tx" : "dfltXform_" },
+ { "name" : "uf035", "uids" : ["0x18","0xe"], "tx" : "dfltXform_" },
+ { "name" : "uf034", "uids" : ["0x20","0x18"], "tx" : "dfltXform_" },
+ { "name" : "uf033", "uids" : ["0xe","0xd","0xa"], "tx" : "dfltXform_" },
+ { "name" : "uf032", "uids" : ["0x10","0x10"], "tx" : "dfltXform_" },
+ { "name" : "uf031", "uids" : ["0x18","0x20"], "tx" : "dfltXform_" },
+ { "name" : "uf030", "uids" : ["0x22","0x26"], "tx" : "dfltXform_" },
+ { "name" : "uf029", "uids" : ["0x26","0x34"], "tx" : "dfltXform_" },
+ { "name" : "uf028", "uids" : ["0x21","0x20"], "tx" : "dfltXform_" },
+ { "name" : "uf027", "uids" : ["0x34","0x35"], "tx" : "dfltXform_" },
+ { "name" : "uf026", "uids" : ["0x2d","0x22"], "tx" : "dfltXform_" },
+ { "name" : "uf025", "uids" : ["0x2e","0x2d"], "tx" : "dfltXform_" },
+ { "name" : "uf024", "uids" : ["0x2e","0x21"], "tx" : "dfltXform_" },
+ { "name" : "uf023", "uids" : ["0xd","0xa","0x22"], "tx" : "dfltXform_" },
+ { "name" : "uf022", "uids" : ["0x26","0x34","0x9"], "tx" : "dfltXform_" },
+ { "name" : "uf021", "uids" : ["0xa","0x22","0x26"], "tx" : "dfltXform_" },
+ { "name" : "uf020", "uids" : ["0x18","0x20","0x4"], "tx" : "dfltXform_" },
+ { "name" : "uf019", "uids" : ["0x22","0x26","0x34"], "tx" : "dfltXform_" },
+ { "name" : "uf018", "uids" : ["0x2e","0x21","0x20"], "tx" : "dfltXform_" },
+ { "name" : "uf017", "uids" : ["0x21","0x20","0x18"], "tx" : "dfltXform_" },
+ { "name" : "uf016", "uids" : ["0x20","0x18","0x20"], "tx" : "dfltXform_" },
+ { "name" : "uf008", "uids" : ["0xd","0x35"], "tx" : "dfltXform_" },
+ { "name" : "uf007", "uids" : ["0xa","0x22"], "tx" : "dfltXform_" },
+ { "name" : "uf005", "uids" : ["0xe","0xd"], "tx" : "dfltXform_" },
+ { "name" : "uf004", "uids" : ["0xe","0x34"], "tx" : "dfltXform_" },
+ { "name" : "uf003", "uids" : ["0x34","0x9"], "tx" : "dfltXform_" },
+ { "name" : "uf002", "uids" : ["0x2e","0x35"], "tx" : "dfltXform_" },
+ { "name" : "uf001", "uids" : ["0x35","0x35"], "tx" : "dfltXform_" },
+ { "name" : "uf213", "uids" : ["0x2e","0x2e"], "tx" : "dfltXform_" },
+ { "name" : "uf000", "uids" : ["0x35","0x2e"], "tx" : "dfltXform_" }
+ ]
+}
diff --git a/arches/isa_json/gen_uarch_rv64v_json.py b/arches/isa_json/gen_uarch_rv64v_json.py
new file mode 100755
index 00000000..5c258be0
--- /dev/null
+++ b/arches/isa_json/gen_uarch_rv64v_json.py
@@ -0,0 +1,294 @@
+#!/usr/bin/env python
+
+import os
+import json
+
+MAVIS = os.environ.get('MAVIS', "../../mavis/")
+JSON = os.environ.get('JSON', "olympia_uarch_rv64v.json")
+
+SUPPORTED_INSTS = {
+# Vector Config Setting Instructions
+ "vsetvli" : {"pipe" : "vset", "latency" : 1},
+ "vsetvl" : {"pipe" : "vset", "latency" : 1},
+ "vsetivli" : {"pipe" : "vset", "latency" : 1},
+
+# TODO: Vector Loads and Stores: Vector Unit-Stride Instructions
+# TODO: Vector Loads and Stores: Vector Strided Instructions
+# TODO: Vector Loads and Stores: Vector Indexed Instructions
+# TODO: Vector Loads and Stores: Unit-stride Fault-Only-First Loads
+# TODO: Vector Loads and Stores: Vector Load/Store Segment Instructions
+# TODO: Vector Loads and Stores: Vector Load/Store Whole Register Instructions
+
+# Vector Integer Arithmetic Instructions: Vector Single-Width Integer Add and Subtract
+ "vadd.vv" : {"pipe" : "vint", "uop_gen" : "ARITH", "latency" : 1},
+ "vadd.vx" : {"pipe" : "vint", "uop_gen" : "ARITH", "latency" : 1},
+ "vadd.vi" : {"pipe" : "vint", "uop_gen" : "ARITH", "latency" : 1},
+ "vsub.vv" : {"pipe" : "vint", "uop_gen" : "ARITH", "latency" : 1},
+ "vsub.vx" : {"pipe" : "vint", "uop_gen" : "ARITH", "latency" : 1},
+ "vrsub.vi" : {"pipe" : "vint", "uop_gen" : "ARITH", "latency" : 1},
+ "vrsub.vx" : {"pipe" : "vint", "uop_gen" : "ARITH", "latency" : 1},
+
+# Vector Integer Arithmetic Instructions: Vector Widening Integer Add/Subtract
+ "vwaddu.vv" : {"pipe" : "vint", "uop_gen" : "ARITH_WIDE_DEST", "latency" : 1},
+ "vwaddu.vx" : {"pipe" : "vint", "uop_gen" : "ARITH_WIDE_DEST", "latency" : 1},
+ "vwsubu.vv" : {"pipe" : "vint", "uop_gen" : "ARITH_WIDE_DEST", "latency" : 1},
+ "vwsubu.vx" : {"pipe" : "vint", "uop_gen" : "ARITH_WIDE_DEST", "latency" : 1},
+ "vwadd.vv" : {"pipe" : "vint", "uop_gen" : "ARITH_WIDE_DEST", "latency" : 1},
+ "vwadd.vx" : {"pipe" : "vint", "uop_gen" : "ARITH_WIDE_DEST", "latency" : 1},
+ "vwsub.vv" : {"pipe" : "vint", "uop_gen" : "ARITH_WIDE_DEST", "latency" : 1},
+ "vwsub.vx" : {"pipe" : "vint", "uop_gen" : "ARITH_WIDE_DEST", "latency" : 1},
+ "vwaddu.wv" : {"pipe" : "vint", "uop_gen" : "ARITH_WIDE_DEST", "latency" : 1},
+ "vwaddu.wx" : {"pipe" : "vint", "uop_gen" : "ARITH_WIDE_DEST", "latency" : 1},
+ "vwsubu.wv" : {"pipe" : "vint", "uop_gen" : "ARITH_WIDE_DEST", "latency" : 1},
+ "vwsubu.wx" : {"pipe" : "vint", "uop_gen" : "ARITH_WIDE_DEST", "latency" : 1},
+ "vwadd.wv" : {"pipe" : "vint", "uop_gen" : "ARITH_WIDE_DEST", "latency" : 1},
+ "vwadd.wx" : {"pipe" : "vint", "uop_gen" : "ARITH_WIDE_DEST", "latency" : 1},
+ "vwsub.wv" : {"pipe" : "vint", "uop_gen" : "ARITH_WIDE_DEST", "latency" : 1},
+ "vwsub.wx" : {"pipe" : "vint", "uop_gen" : "ARITH_WIDE_DEST", "latency" : 1},
+
+# TODO: Vector Integer Arithmetic Instructions: Vector Integer Extension
+# FIXME: Requires Mavis fix to support correctly
+# "vzext.vf2" : {"pipe" : "vint", "uop_gen" : "ARITH_EXT", "latency" : 1},
+# "vsext.vf2" : {"pipe" : "vint", "uop_gen" : "ARITH_EXT", "latency" : 1},
+# "vzext.vf4" : {"pipe" : "vint", "uop_gen" : "ARITH_EXT", "latency" : 1},
+# "vsext.vf4" : {"pipe" : "vint", "uop_gen" : "ARITH_EXT", "latency" : 1},
+# "vzext.vf8" : {"pipe" : "vint", "uop_gen" : "ARITH_EXT", "latency" : 1},
+# "vsext.vf8" : {"pipe" : "vint", "uop_gen" : "ARITH_EXT", "latency" : 1},
+
+# Vector Integer Arithmetic Instructions: Vector Integer Add-with-Carry/Subtract-with-Borrow Instructions
+# FIXME: Requires Mavis fix to include vector mask
+ "vadc.vvm" : {"pipe" : "vint", "uop_gen" : "ARITH", "latency" : 1},
+ "vadc.vxm" : {"pipe" : "vint", "uop_gen" : "ARITH", "latency" : 1},
+ "vadc.vim" : {"pipe" : "vint", "uop_gen" : "ARITH", "latency" : 1},
+ "vmadc.vvm" : {"pipe" : "vint", "uop_gen" : "ARITH", "latency" : 1},
+ "vmadc.vxm" : {"pipe" : "vint", "uop_gen" : "ARITH", "latency" : 1},
+ "vmadc.vim" : {"pipe" : "vint", "uop_gen" : "ARITH", "latency" : 1},
+ "vmadc.vv" : {"pipe" : "vint", "uop_gen" : "ARITH", "latency" : 1},
+ "vmadc.vx" : {"pipe" : "vint", "uop_gen" : "ARITH", "latency" : 1},
+ "vmadc.vi" : {"pipe" : "vint", "uop_gen" : "ARITH", "latency" : 1},
+ "vsbc.vvm" : {"pipe" : "vint", "uop_gen" : "ARITH", "latency" : 1},
+ "vsbc.vxm" : {"pipe" : "vint", "uop_gen" : "ARITH", "latency" : 1},
+ "vmsbc.vvm" : {"pipe" : "vint", "uop_gen" : "ARITH", "latency" : 1},
+ "vmsbc.vxm" : {"pipe" : "vint", "uop_gen" : "ARITH", "latency" : 1},
+ "vmsbc.vv" : {"pipe" : "vint", "uop_gen" : "ARITH", "latency" : 1},
+ "vmsbc.vx" : {"pipe" : "vint", "uop_gen" : "ARITH", "latency" : 1},
+
+# Vector Integer Arithmetic Instructions: Vector Bitwise Logical Instructions
+ "vand.vv" : {"pipe" : "vint", "uop_gen" : "ARITH", "latency" : 1},
+ "vand.vx" : {"pipe" : "vint", "uop_gen" : "ARITH", "latency" : 1},
+ "vand.vi" : {"pipe" : "vint", "uop_gen" : "ARITH", "latency" : 1},
+ "vor.vv" : {"pipe" : "vint", "uop_gen" : "ARITH", "latency" : 1},
+ "vor.vx" : {"pipe" : "vint", "uop_gen" : "ARITH", "latency" : 1},
+ "vor.vi" : {"pipe" : "vint", "uop_gen" : "ARITH", "latency" : 1},
+ "vxor.vv" : {"pipe" : "vint", "uop_gen" : "ARITH", "latency" : 1},
+ "vxor.vx" : {"pipe" : "vint", "uop_gen" : "ARITH", "latency" : 1},
+ "vxor.vi" : {"pipe" : "vint", "uop_gen" : "ARITH", "latency" : 1},
+
+# Vector Integer Arithmetic Instructions: Vector Single-Width Shift Instructions
+ "vsll.vv" : {"pipe" : "vint", "uop_gen" : "ARITH", "latency" : 1},
+ "vsll.vx" : {"pipe" : "vint", "uop_gen" : "ARITH", "latency" : 1},
+ "vsll.vi" : {"pipe" : "vint", "uop_gen" : "ARITH", "latency" : 1},
+ "vsrl.vv" : {"pipe" : "vint", "uop_gen" : "ARITH", "latency" : 1},
+ "vsrl.vx" : {"pipe" : "vint", "uop_gen" : "ARITH", "latency" : 1},
+ "vsrl.vi" : {"pipe" : "vint", "uop_gen" : "ARITH", "latency" : 1},
+ "vsra.vv" : {"pipe" : "vint", "uop_gen" : "ARITH", "latency" : 1},
+ "vsra.vx" : {"pipe" : "vint", "uop_gen" : "ARITH", "latency" : 1},
+ "vsra.vi" : {"pipe" : "vint", "uop_gen" : "ARITH", "latency" : 1},
+
+# Vector Integer Arithmetic Instructions: Vector Narrowing Integer Right Shift Instructions
+ "vnsrl.wv" : {"pipe" : "vint", "uop_gen" : "ARITH", "latency" : 1},
+ "vnsrl.wx" : {"pipe" : "vint", "uop_gen" : "ARITH", "latency" : 1},
+ "vnsrl.wi" : {"pipe" : "vint", "uop_gen" : "ARITH", "latency" : 1},
+ "vnsra.wv" : {"pipe" : "vint", "uop_gen" : "ARITH", "latency" : 1},
+ "vnsra.wx" : {"pipe" : "vint", "uop_gen" : "ARITH", "latency" : 1},
+ "vnsra.wi" : {"pipe" : "vint", "uop_gen" : "ARITH", "latency" : 1},
+
+# Vector Integer Arithmetic Instructions: Vector Integer Compare Instructions
+ "vmseq.vv" : {"pipe" : "vint", "uop_gen" : "ARITH_SINGLE_DEST", "latency" : 1},
+ "vmseq.vx" : {"pipe" : "vint", "uop_gen" : "ARITH_SINGLE_DEST", "latency" : 1},
+ "vmseq.vi" : {"pipe" : "vint", "uop_gen" : "ARITH_SINGLE_DEST", "latency" : 1},
+ "vmsne.vv" : {"pipe" : "vint", "uop_gen" : "ARITH_SINGLE_DEST", "latency" : 1},
+ "vmsne.vx" : {"pipe" : "vint", "uop_gen" : "ARITH_SINGLE_DEST", "latency" : 1},
+ "vmsne.vi" : {"pipe" : "vint", "uop_gen" : "ARITH_SINGLE_DEST", "latency" : 1},
+ "vmsltu.vv" : {"pipe" : "vint", "uop_gen" : "ARITH_SINGLE_DEST", "latency" : 1},
+ "vmsltu.vx" : {"pipe" : "vint", "uop_gen" : "ARITH_SINGLE_DEST", "latency" : 1},
+ "vmslt.vv" : {"pipe" : "vint", "uop_gen" : "ARITH_SINGLE_DEST", "latency" : 1},
+ "vmslt.vx" : {"pipe" : "vint", "uop_gen" : "ARITH_SINGLE_DEST", "latency" : 1},
+ "vmsleu.vv" : {"pipe" : "vint", "uop_gen" : "ARITH_SINGLE_DEST", "latency" : 1},
+ "vmsleu.vx" : {"pipe" : "vint", "uop_gen" : "ARITH_SINGLE_DEST", "latency" : 1},
+ "vmsleu.vi" : {"pipe" : "vint", "uop_gen" : "ARITH_SINGLE_DEST", "latency" : 1},
+ "vmsle.vv" : {"pipe" : "vint", "uop_gen" : "ARITH_SINGLE_DEST", "latency" : 1},
+ "vmsle.vx" : {"pipe" : "vint", "uop_gen" : "ARITH_SINGLE_DEST", "latency" : 1},
+ "vmsle.vi" : {"pipe" : "vint", "uop_gen" : "ARITH_SINGLE_DEST", "latency" : 1},
+ "vmsgtu.vx" : {"pipe" : "vint", "uop_gen" : "ARITH_SINGLE_DEST", "latency" : 1},
+ "vmsgtu.vi" : {"pipe" : "vint", "uop_gen" : "ARITH_SINGLE_DEST", "latency" : 1},
+ "vmsgt.vx" : {"pipe" : "vint", "uop_gen" : "ARITH_SINGLE_DEST", "latency" : 1},
+ "vmsgt.vi" : {"pipe" : "vint", "uop_gen" : "ARITH_SINGLE_DEST", "latency" : 1},
+
+# Vector Integer Arithmetic Instructions: Vector Integer Min/Max Instructions
+ "vminu.vv" : {"pipe" : "vint", "uop_gen" : "ARITH", "latency" : 1},
+ "vminu.vx" : {"pipe" : "vint", "uop_gen" : "ARITH", "latency" : 1},
+ "vmin.vv" : {"pipe" : "vint", "uop_gen" : "ARITH", "latency" : 1},
+ "vmin.vx" : {"pipe" : "vint", "uop_gen" : "ARITH", "latency" : 1},
+ "vmaxu.vv" : {"pipe" : "vint", "uop_gen" : "ARITH", "latency" : 1},
+ "vmaxu.vx" : {"pipe" : "vint", "uop_gen" : "ARITH", "latency" : 1},
+ "vmax.vv" : {"pipe" : "vint", "uop_gen" : "ARITH", "latency" : 1},
+ "vmax.vx" : {"pipe" : "vint", "uop_gen" : "ARITH", "latency" : 1},
+
+# Vector Integer Arithmetic Instructions: Vector Single-Width Integer Multiply Instructions
+ "vmul.vv" : {"pipe" : "vmul", "uop_gen" : "ARITH", "latency" : 3},
+ "vmul.vx" : {"pipe" : "vmul", "uop_gen" : "ARITH", "latency" : 3},
+ "vmulhu.vx" : {"pipe" : "vmul", "uop_gen" : "ARITH", "latency" : 3},
+ "vmulhu.vv" : {"pipe" : "vmul", "uop_gen" : "ARITH", "latency" : 3},
+ "vmulh.vv" : {"pipe" : "vmul", "uop_gen" : "ARITH", "latency" : 3},
+ "vmulh.vx" : {"pipe" : "vmul", "uop_gen" : "ARITH", "latency" : 3},
+ "vmulhsu.vv" : {"pipe" : "vmul", "uop_gen" : "ARITH", "latency" : 3},
+ "vmulhsu.vx" : {"pipe" : "vmul", "uop_gen" : "ARITH", "latency" : 3},
+
+# Vector Integer Arithmetic Instructions: Vector Integer Divide Instructions
+ "vdiv.vv" : {"pipe" : "vdiv", "uop_gen" : "ARITH", "latency" : 23},
+ "vdiv.vx" : {"pipe" : "vdiv", "uop_gen" : "ARITH", "latency" : 23},
+ "vdivu.vv" : {"pipe" : "vdiv", "uop_gen" : "ARITH", "latency" : 23},
+ "vdivu.vx" : {"pipe" : "vdiv", "uop_gen" : "ARITH", "latency" : 23},
+ "vremu.vv" : {"pipe" : "vdiv", "uop_gen" : "ARITH", "latency" : 23},
+ "vremu.vx" : {"pipe" : "vdiv", "uop_gen" : "ARITH", "latency" : 23},
+ "vrem.vv" : {"pipe" : "vdiv", "uop_gen" : "ARITH", "latency" : 23},
+ "vrem.vx" : {"pipe" : "vdiv", "uop_gen" : "ARITH", "latency" : 23},
+
+# Vector Integer Arithmetic Instructions: Vector Widening Integer Multiply Instructions
+ "vwmul.vv" : {"pipe" : "vmul", "uop_gen" : "ARITH_WIDE_DEST", "latency" : 3},
+ "vwmul.vx" : {"pipe" : "vmul", "uop_gen" : "ARITH_WIDE_DEST", "latency" : 3},
+ "vwmulu.vv" : {"pipe" : "vmul", "uop_gen" : "ARITH_WIDE_DEST", "latency" : 3},
+ "vwmulu.vx" : {"pipe" : "vmul", "uop_gen" : "ARITH_WIDE_DEST", "latency" : 3},
+ "vwmulsu.vv" : {"pipe" : "vmul", "uop_gen" : "ARITH_WIDE_DEST", "latency" : 3},
+ "vwmulsu.vx" : {"pipe" : "vmul", "uop_gen" : "ARITH_WIDE_DEST", "latency" : 3},
+
+# Vector Integer Arithmetic Instructions: Vector Single-Width Integer Multiply-Add Instructions
+ "vmacc.vv" : {"pipe" : "vmul", "uop_gen" : "ARITH_MAC", "latency" : 3},
+ "vmacc.vx" : {"pipe" : "vmul", "uop_gen" : "ARITH_MAC", "latency" : 3},
+ "vnmsac.vv" : {"pipe" : "vmul", "uop_gen" : "ARITH_MAC", "latency" : 3},
+ "vnmsac.vx" : {"pipe" : "vmul", "uop_gen" : "ARITH_MAC", "latency" : 3},
+ "vmadd.vv" : {"pipe" : "vmul", "uop_gen" : "ARITH_MAC", "latency" : 3},
+ "vmadd.vx" : {"pipe" : "vmul", "uop_gen" : "ARITH_MAC", "latency" : 3},
+ "vnmsub.vv" : {"pipe" : "vmul", "uop_gen" : "ARITH_MAC", "latency" : 3},
+ "vnmsub.vx" : {"pipe" : "vmul", "uop_gen" : "ARITH_MAC", "latency" : 3},
+
+# Vector Integer Arithmetic Instructions: Vector Widening Integer Multiply-Add Instructions
+ "vwmaccu.vv" : {"pipe" : "vmul", "uop_gen" : "ARITH_MAC_WIDE_DEST", "latency" : 3},
+ "vwmaccu.vx" : {"pipe" : "vmul", "uop_gen" : "ARITH_MAC_WIDE_DEST", "latency" : 3},
+ "vwmacc.vv" : {"pipe" : "vmul", "uop_gen" : "ARITH_MAC_WIDE_DEST", "latency" : 3},
+ "vwmacc.vx" : {"pipe" : "vmul", "uop_gen" : "ARITH_MAC_WIDE_DEST", "latency" : 3},
+ "vwmaccsu.vv" : {"pipe" : "vmul", "uop_gen" : "ARITH_MAC_WIDE_DEST", "latency" : 3},
+ "vwmaccsu.vx" : {"pipe" : "vmul", "uop_gen" : "ARITH_MAC_WIDE_DEST", "latency" : 3},
+ "vwmaccus.vx" : {"pipe" : "vmul", "uop_gen" : "ARITH_MAC_WIDE_DEST", "latency" : 3},
+
+# Vector Integer Arithmetic Instructions: Vector Integer Merge Instructions
+# FIXME: Requires Mavis fix to include vector mask
+ "vmerge.vvm" : {"pipe" : "vint", "uop_gen" : "ARITH", "latency" : 1},
+ "vmerge.vxm" : {"pipe" : "vint", "uop_gen" : "ARITH", "latency" : 1},
+ "vmerge.vim" : {"pipe" : "vint", "uop_gen" : "ARITH", "latency" : 1},
+
+# Vector Integer Arithmetic Instructions: Vector Integer Move Instructions
+ "vmv.v.v" : {"pipe" : "vint", "uop_gen" : "ARITH", "latency" : 1},
+ "vmv.v.x" : {"pipe" : "vint", "uop_gen" : "ARITH", "latency" : 1},
+ "vmv.v.i" : {"pipe" : "vint", "uop_gen" : "ARITH", "latency" : 1},
+
+# TODO: Vector Fixed-Point Arithmetic Instructions: Vector Single-Width Saturating Add and Subtract
+# TODO: Vector Fixed-Point Arithmetic Instructions: Vector Single-Width Averaging Add and Subtract
+# Vector Fixed-Point Arithmetic Instructions: Vector Single-Width Fractional Multiply with Rounding and Saturation
+ "vsmul.vx" : {"pipe" : "vmul", "uop_gen" : "ARITH", "latency" : 3},
+ "vsmul.vv" : {"pipe" : "vmul", "uop_gen" : "ARITH", "latency" : 3},
+
+# TODO: Vector Fixed-Point Arithmetic Instructions: Vector Single-Width Scaling Shift Instructions
+# TODO: Vector Fixed-Point Arithmetic Instructions: Vector Narrowing Fixed-Point Clip Instructions
+
+# TODO: Vector Floating-Point Instructions: Vector Floating-Point Exception Flags
+# TODO: Vector Floating-Point Instructions: Vector Single-Width Floating-Point Add/Subtract Instructions
+# TODO: Vector Floating-Point Instructions: Vector Widening Floating-Point Add/Subtract Instructions
+# TODO: Vector Floating-Point Instructions: Vector Single-Width Floating-Point Multiply/Divide Instructions
+# TODO: Vector Floating-Point Instructions: Vector Widening Floating-Point Multiply
+# TODO: Vector Floating-Point Instructions: Vector Single-Width Floating-Point Fused Multiply-Add Instructions
+# TODO: Vector Floating-Point Instructions: Vector Widening Floating-Point Fused Multiply-Add Instructions
+# TODO: Vector Floating-Point Instructions: Vector Floating-Point Square-Root Instruction
+# TODO: Vector Floating-Point Instructions: Vector Floating-Point Reciprocal Square-Root Estimate Instruction
+# TODO: Vector Floating-Point Instructions: Vector Floating-Point Reciprocal Estimate Instruction
+# TODO: Vector Floating-Point Instructions: Vector Floating-Point MIN/MAX Instructions
+# TODO: Vector Floating-Point Instructions: Vector Floating-Point Sign-Injection Instructions
+# TODO: Vector Floating-Point Instructions: Vector Floating-Point Compare Instructions
+# TODO: Vector Floating-Point Instructions: Vector Floating-Point Classify Instruction
+# TODO: Vector Floating-Point Instructions: Vector Floating-Point Merge Instruction
+# TODO: Vector Floating-Point Instructions: Vector Floating-Point Move Instruction
+# TODO: Vector Floating-Point Instructions: Single-Width Floating-Point/Integer Type-Convert Instructions
+# TODO: Vector Floating-Point Instructions: Widening Floating-Point/Integer Type-Convert Instructions
+# TODO: Vector Floating-Point Instructions: Narrowing Floating-Point/Integer Type-Convert Instructions
+
+# TODO: Vector Reduction Operations: Vector Single-Width Integer Reduction Instructions
+# TODO: Vector Reduction Operations: Vector Widening Integer Reduction Instructions
+# TODO: Vector Reduction Operations: Vector Single-Width Floating-Point Reduction Instructions
+# TODO: Vector Reduction Operations: Vector Widening Floating-Point Reduction Instructions
+
+# Vector Mask Instructions: Vector Mask-Register Logical Instructions
+ "vmandn.mm" : {"pipe" : "vmask", "uop_gen" : "NONE", "latency" : 1},
+ "vmand.mm" : {"pipe" : "vmask", "uop_gen" : "NONE", "latency" : 1},
+ "vmor.mm" : {"pipe" : "vmask", "uop_gen" : "NONE", "latency" : 1},
+ "vmxor.mm" : {"pipe" : "vmask", "uop_gen" : "NONE", "latency" : 1},
+ "vmorn.mm" : {"pipe" : "vmask", "uop_gen" : "NONE", "latency" : 1},
+ "vmnand.mm" : {"pipe" : "vmask", "uop_gen" : "NONE", "latency" : 1},
+ "vmnor.mm" : {"pipe" : "vmask", "uop_gen" : "NONE", "latency" : 1},
+ "vmxnor.mm" : {"pipe" : "vmask", "uop_gen" : "NONE", "latency" : 1},
+
+# TODO: Vector Mask Instructions: Vector count population in mask vcpop.m
+# TODO: Vector Mask Instructions: vfirst nd-rst-set mask bit
+# TODO: Vector Mask Instructions: vmsbf.m set-before-rst mask bit
+# TODO: Vector Mask Instructions: vmsif.m set-including-rst mask bit
+# TODO: Vector Mask Instructions: vmsof.m set-only-rst mask bit
+# TODO: Vector Mask Instructions: Vector Iota Instruction
+# TODO: Vector Mask Instructions: Vector Element Index Instruction
+
+# TODO: Vector Permutation Instructions: Integer Scalar Move Instructions
+# TODO: Vector Permutation Instructions: Floating-Point Scalar Move Instructions
+# TODO: Vector Permutation Instructions: Vector Slide Instructions
+# TODO: Vector Permutation Instructions: Vector Register Gather Instructions
+# TODO: Vector Permutation Instructions: Vector Compress Instruction
+# TODO: Vector Permutation Instructions: Whole Vector Register Move
+}
+
+# Get a list of all vector insts from Mavis
+mavis_rv64v_json = []
+with open(MAVIS+"json/isa_rv64v.json", "r") as f:
+ mavis_rv64v_json.extend(json.load(f))
+with open(MAVIS+"json/isa_rv64vf.json", "r") as f:
+ mavis_rv64v_json.extend(json.load(f))
+
+# Sort alphabetically by mnemonic
+mavis_rv64v_json.sort(key=lambda opcode: opcode["mnemonic"])
+
+# Construct the uarch json
+uarch_json = []
+for opcode in mavis_rv64v_json:
+ mnemonic = opcode["mnemonic"]
+
+ # Assume inst is unsupported
+ opcode_entry = {
+ "mnemonic" : mnemonic,
+ "pipe" : "?",
+ "uop_gen" : "NONE",
+ "latency" : 0
+ }
+
+ # If it is supported, get the pipe and latency
+ if mnemonic in SUPPORTED_INSTS.keys():
+ opcode_entry["mnemonic"] = mnemonic
+ opcode_entry["pipe"] = SUPPORTED_INSTS[mnemonic]["pipe"]
+ if(SUPPORTED_INSTS[mnemonic].get("uop_gen")):
+ opcode_entry["uop_gen"] = SUPPORTED_INSTS[mnemonic]["uop_gen"]
+ opcode_entry["pipe"] = SUPPORTED_INSTS[mnemonic]["pipe"]
+ opcode_entry["latency"] = SUPPORTED_INSTS[mnemonic]["latency"]
+
+ uarch_json.append(opcode_entry)
+
+# Write the json to the file
+with open(JSON, "w") as f:
+ print("Writing rv64v uarch json to "+JSON)
+ json.dump(uarch_json, f, indent=4)
+
diff --git a/arches/isa_json/olympia_uarch_rv64v.json b/arches/isa_json/olympia_uarch_rv64v.json
new file mode 100644
index 00000000..118e5b97
--- /dev/null
+++ b/arches/isa_json/olympia_uarch_rv64v.json
@@ -0,0 +1,2228 @@
+[
+ {
+ "mnemonic": "vaadd.vv",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vaadd.vx",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vaaddu.vv",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vaaddu.vx",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vadc.vim",
+ "pipe": "vint",
+ "uop_gen": "ARITH",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vadc.vvm",
+ "pipe": "vint",
+ "uop_gen": "ARITH",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vadc.vxm",
+ "pipe": "vint",
+ "uop_gen": "ARITH",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vadd.vi",
+ "pipe": "vint",
+ "uop_gen": "ARITH",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vadd.vv",
+ "pipe": "vint",
+ "uop_gen": "ARITH",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vadd.vx",
+ "pipe": "vint",
+ "uop_gen": "ARITH",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vand.vi",
+ "pipe": "vint",
+ "uop_gen": "ARITH",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vand.vv",
+ "pipe": "vint",
+ "uop_gen": "ARITH",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vand.vx",
+ "pipe": "vint",
+ "uop_gen": "ARITH",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vasub.vv",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vasub.vx",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vasubu.vv",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vasubu.vx",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vcompress.vm",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vdiv.vv",
+ "pipe": "vdiv",
+ "uop_gen": "ARITH",
+ "latency": 23
+ },
+ {
+ "mnemonic": "vdiv.vx",
+ "pipe": "vdiv",
+ "uop_gen": "ARITH",
+ "latency": 23
+ },
+ {
+ "mnemonic": "vdivu.vv",
+ "pipe": "vdiv",
+ "uop_gen": "ARITH",
+ "latency": 23
+ },
+ {
+ "mnemonic": "vdivu.vx",
+ "pipe": "vdiv",
+ "uop_gen": "ARITH",
+ "latency": 23
+ },
+ {
+ "mnemonic": "vfadd.vf",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vfadd.vv",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vfclass.v",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vfcvt.f.x.v",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vfcvt.f.xu.v",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vfcvt.rtz.x.f.v",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vfcvt.rtz.xu.f.v",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vfcvt.x.f.v",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vfcvt.xu.f.v",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vfdiv.vf",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vfdiv.vv",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vfdot.vv",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vfirst.m",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vfmacc.vf",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vfmacc.vv",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vfmadd.vf",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vfmadd.vv",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vfmax.vf",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vfmax.vv",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vfmerge.vfm",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vfmin.vf",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vfmin.vv",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vfmsac.vf",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vfmsac.vv",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vfmsub.vf",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vfmsub.vv",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vfmul.vf",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vfmul.vv",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vfmv.f.s",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vfmv.s.f",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vfmv.v.f",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vfncvt.f.f.w",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vfncvt.f.x.w",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vfncvt.f.xu.w",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vfncvt.rod.f.f.w",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vfncvt.rtz.x.f.w",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vfncvt.rtz.xu.f.w",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vfncvt.x.f.w",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vfncvt.xu.f.w",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vfnmacc.vf",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vfnmacc.vv",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vfnmadd.vf",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vfnmadd.vv",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vfnmsac.vf",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vfnmsac.vv",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vfnmsub.vf",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vfnmsub.vv",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vfrdiv.vf",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vfrec7.v",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vfredmax.vs",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vfredmin.vs",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vfredosum.vs",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vfredusum.vs",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vfrsqrt7.v",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vfrsub.vf",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vfsgnj.vf",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vfsgnj.vv",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vfsgnjn.vf",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vfsgnjn.vv",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vfsgnjx.vf",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vfsgnjx.vv",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vfslide1down.vf",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vfslide1up.vf",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vfsqrt.v",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vfsub.vf",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vfsub.vv",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vfwadd.vf",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vfwadd.vv",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vfwadd.wf",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vfwadd.wv",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vfwcvt.f.f.v",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vfwcvt.f.x.v",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vfwcvt.f.xu.v",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vfwcvt.rtz.x.f.v",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vfwcvt.rtz.xu.f.v",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vfwcvt.x.f.v",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vfwcvt.xu.f.v",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vfwmacc.vf",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vfwmacc.vv",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vfwmsac.vf",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vfwmsac.vv",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vfwmul.vf",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vfwmul.vv",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vfwnmacc.vf",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vfwnmacc.vv",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vfwnmsac.vf",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vfwnmsac.vv",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vfwredosum.vs",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vfwredusum.vs",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vfwsub.vf",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vfwsub.vv",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vfwsub.wf",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vfwsub.wv",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vid.v",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "viota.m",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vl1re16.v",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vl1re32.v",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vl1re64.v",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vl1re8.v",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vl2re16.v",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vl2re32.v",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vl2re64.v",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vl2re8.v",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vl4re16.v",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vl4re32.v",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vl4re64.v",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vl4re8.v",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vl8re16.v",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vl8re32.v",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vl8re64.v",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vl8re8.v",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vle16.v",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vle16ff.v",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vle32.v",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vle32ff.v",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vle64.v",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vle64ff.v",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vle8.v",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vle8ff.v",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vlm.v",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vloxei16.v",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vloxei32.v",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vloxei64.v",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vloxei8.v",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vlse16.v",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vlse32.v",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vlse64.v",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vlse8.v",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vluxei16.v",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vluxei32.v",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vluxei64.v",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vluxei8.v",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vmacc.vv",
+ "pipe": "vmul",
+ "uop_gen": "ARITH_MAC",
+ "latency": 3
+ },
+ {
+ "mnemonic": "vmacc.vx",
+ "pipe": "vmul",
+ "uop_gen": "ARITH_MAC",
+ "latency": 3
+ },
+ {
+ "mnemonic": "vmadc.vim",
+ "pipe": "vint",
+ "uop_gen": "ARITH",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vmadc.vvm",
+ "pipe": "vint",
+ "uop_gen": "ARITH",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vmadc.vxm",
+ "pipe": "vint",
+ "uop_gen": "ARITH",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vmadd.vv",
+ "pipe": "vmul",
+ "uop_gen": "ARITH_MAC",
+ "latency": 3
+ },
+ {
+ "mnemonic": "vmadd.vx",
+ "pipe": "vmul",
+ "uop_gen": "ARITH_MAC",
+ "latency": 3
+ },
+ {
+ "mnemonic": "vmand.mm",
+ "pipe": "vmask",
+ "uop_gen": "NONE",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vmandn.mm",
+ "pipe": "vmask",
+ "uop_gen": "NONE",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vmax.vv",
+ "pipe": "vint",
+ "uop_gen": "ARITH",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vmax.vx",
+ "pipe": "vint",
+ "uop_gen": "ARITH",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vmaxu.vv",
+ "pipe": "vint",
+ "uop_gen": "ARITH",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vmaxu.vx",
+ "pipe": "vint",
+ "uop_gen": "ARITH",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vmerge.vim",
+ "pipe": "vint",
+ "uop_gen": "ARITH",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vmerge.vvm",
+ "pipe": "vint",
+ "uop_gen": "ARITH",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vmerge.vxm",
+ "pipe": "vint",
+ "uop_gen": "ARITH",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vmfeq.vf",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vmfeq.vv",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vmfge.vf",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vmfgt.vf",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vmfle.vf",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vmfle.vv",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vmflt.vf",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vmflt.vv",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vmfne.vf",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vmfne.vv",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vmin.vv",
+ "pipe": "vint",
+ "uop_gen": "ARITH",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vmin.vx",
+ "pipe": "vint",
+ "uop_gen": "ARITH",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vminu.vv",
+ "pipe": "vint",
+ "uop_gen": "ARITH",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vminu.vx",
+ "pipe": "vint",
+ "uop_gen": "ARITH",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vmnand.mm",
+ "pipe": "vmask",
+ "uop_gen": "NONE",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vmnor.mm",
+ "pipe": "vmask",
+ "uop_gen": "NONE",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vmor.mm",
+ "pipe": "vmask",
+ "uop_gen": "NONE",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vmorn.mm",
+ "pipe": "vmask",
+ "uop_gen": "NONE",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vmsbc.vvm",
+ "pipe": "vint",
+ "uop_gen": "ARITH",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vmsbc.vxm",
+ "pipe": "vint",
+ "uop_gen": "ARITH",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vmsbf.m",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vmseq.vi",
+ "pipe": "vint",
+ "uop_gen": "ARITH_SINGLE_DEST",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vmseq.vv",
+ "pipe": "vint",
+ "uop_gen": "ARITH_SINGLE_DEST",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vmseq.vx",
+ "pipe": "vint",
+ "uop_gen": "ARITH_SINGLE_DEST",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vmsgt.vi",
+ "pipe": "vint",
+ "uop_gen": "ARITH_SINGLE_DEST",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vmsgt.vx",
+ "pipe": "vint",
+ "uop_gen": "ARITH_SINGLE_DEST",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vmsgtu.vi",
+ "pipe": "vint",
+ "uop_gen": "ARITH_SINGLE_DEST",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vmsgtu.vx",
+ "pipe": "vint",
+ "uop_gen": "ARITH_SINGLE_DEST",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vmsif.m",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vmsle.vi",
+ "pipe": "vint",
+ "uop_gen": "ARITH_SINGLE_DEST",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vmsle.vv",
+ "pipe": "vint",
+ "uop_gen": "ARITH_SINGLE_DEST",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vmsle.vx",
+ "pipe": "vint",
+ "uop_gen": "ARITH_SINGLE_DEST",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vmsleu.vi",
+ "pipe": "vint",
+ "uop_gen": "ARITH_SINGLE_DEST",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vmsleu.vv",
+ "pipe": "vint",
+ "uop_gen": "ARITH_SINGLE_DEST",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vmsleu.vx",
+ "pipe": "vint",
+ "uop_gen": "ARITH_SINGLE_DEST",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vmslt.vv",
+ "pipe": "vint",
+ "uop_gen": "ARITH_SINGLE_DEST",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vmslt.vx",
+ "pipe": "vint",
+ "uop_gen": "ARITH_SINGLE_DEST",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vmsltu.vv",
+ "pipe": "vint",
+ "uop_gen": "ARITH_SINGLE_DEST",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vmsltu.vx",
+ "pipe": "vint",
+ "uop_gen": "ARITH_SINGLE_DEST",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vmsne.vi",
+ "pipe": "vint",
+ "uop_gen": "ARITH_SINGLE_DEST",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vmsne.vv",
+ "pipe": "vint",
+ "uop_gen": "ARITH_SINGLE_DEST",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vmsne.vx",
+ "pipe": "vint",
+ "uop_gen": "ARITH_SINGLE_DEST",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vmsof.m",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vmul.vv",
+ "pipe": "vmul",
+ "uop_gen": "ARITH",
+ "latency": 3
+ },
+ {
+ "mnemonic": "vmul.vx",
+ "pipe": "vmul",
+ "uop_gen": "ARITH",
+ "latency": 3
+ },
+ {
+ "mnemonic": "vmulh.vv",
+ "pipe": "vmul",
+ "uop_gen": "ARITH",
+ "latency": 3
+ },
+ {
+ "mnemonic": "vmulh.vx",
+ "pipe": "vmul",
+ "uop_gen": "ARITH",
+ "latency": 3
+ },
+ {
+ "mnemonic": "vmulhsu.vv",
+ "pipe": "vmul",
+ "uop_gen": "ARITH",
+ "latency": 3
+ },
+ {
+ "mnemonic": "vmulhsu.vx",
+ "pipe": "vmul",
+ "uop_gen": "ARITH",
+ "latency": 3
+ },
+ {
+ "mnemonic": "vmulhu.vv",
+ "pipe": "vmul",
+ "uop_gen": "ARITH",
+ "latency": 3
+ },
+ {
+ "mnemonic": "vmulhu.vx",
+ "pipe": "vmul",
+ "uop_gen": "ARITH",
+ "latency": 3
+ },
+ {
+ "mnemonic": "vmv.s.x",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vmv.v.i",
+ "pipe": "vint",
+ "uop_gen": "ARITH",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vmv.v.v",
+ "pipe": "vint",
+ "uop_gen": "ARITH",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vmv.v.x",
+ "pipe": "vint",
+ "uop_gen": "ARITH",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vmv.x.s",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vmv1r.v",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vmv2r.v",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vmv4r.v",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vmv8r.v",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vmxnor.mm",
+ "pipe": "vmask",
+ "uop_gen": "NONE",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vmxor.mm",
+ "pipe": "vmask",
+ "uop_gen": "NONE",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vnclip.wi",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vnclip.wv",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vnclip.wx",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vnclipu.wi",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vnclipu.wv",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vnclipu.wx",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vnmsac.vv",
+ "pipe": "vmul",
+ "uop_gen": "ARITH_MAC",
+ "latency": 3
+ },
+ {
+ "mnemonic": "vnmsac.vx",
+ "pipe": "vmul",
+ "uop_gen": "ARITH_MAC",
+ "latency": 3
+ },
+ {
+ "mnemonic": "vnmsub.vv",
+ "pipe": "vmul",
+ "uop_gen": "ARITH_MAC",
+ "latency": 3
+ },
+ {
+ "mnemonic": "vnmsub.vx",
+ "pipe": "vmul",
+ "uop_gen": "ARITH_MAC",
+ "latency": 3
+ },
+ {
+ "mnemonic": "vnsra.wi",
+ "pipe": "vint",
+ "uop_gen": "ARITH",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vnsra.wv",
+ "pipe": "vint",
+ "uop_gen": "ARITH",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vnsra.wx",
+ "pipe": "vint",
+ "uop_gen": "ARITH",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vnsrl.wi",
+ "pipe": "vint",
+ "uop_gen": "ARITH",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vnsrl.wv",
+ "pipe": "vint",
+ "uop_gen": "ARITH",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vnsrl.wx",
+ "pipe": "vint",
+ "uop_gen": "ARITH",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vor.vi",
+ "pipe": "vint",
+ "uop_gen": "ARITH",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vor.vv",
+ "pipe": "vint",
+ "uop_gen": "ARITH",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vor.vx",
+ "pipe": "vint",
+ "uop_gen": "ARITH",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vpopc.m",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vredand.vs",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vredmax.vs",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vredmaxu.vs",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vredmin.vs",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vredminu.vs",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vredor.vs",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vredsum.vs",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vredxor.vs",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vrem.vv",
+ "pipe": "vdiv",
+ "uop_gen": "ARITH",
+ "latency": 23
+ },
+ {
+ "mnemonic": "vrem.vx",
+ "pipe": "vdiv",
+ "uop_gen": "ARITH",
+ "latency": 23
+ },
+ {
+ "mnemonic": "vremu.vv",
+ "pipe": "vdiv",
+ "uop_gen": "ARITH",
+ "latency": 23
+ },
+ {
+ "mnemonic": "vremu.vx",
+ "pipe": "vdiv",
+ "uop_gen": "ARITH",
+ "latency": 23
+ },
+ {
+ "mnemonic": "vrgather.vi",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vrgather.vv",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vrgather.vx",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vrgatherei16.vv",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vrsub.vi",
+ "pipe": "vint",
+ "uop_gen": "ARITH",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vrsub.vx",
+ "pipe": "vint",
+ "uop_gen": "ARITH",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vs1r.v",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vs2r.v",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vs4r.v",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vs8r.v",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vsadd.vi",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vsadd.vv",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vsadd.vx",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vsaddu.vi",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vsaddu.vv",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vsaddu.vx",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vsbc.vvm",
+ "pipe": "vint",
+ "uop_gen": "ARITH",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vsbc.vxm",
+ "pipe": "vint",
+ "uop_gen": "ARITH",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vse16.v",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vse32.v",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vse64.v",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vse8.v",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vsetivli",
+ "pipe": "vset",
+ "uop_gen": "NONE",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vsetvl",
+ "pipe": "vset",
+ "uop_gen": "NONE",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vsetvli",
+ "pipe": "vset",
+ "uop_gen": "NONE",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vsext.vf2",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vsext.vf4",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vsext.vf8",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vslide1down.vx",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vslide1up.vx",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vslidedown.vi",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vslidedown.vx",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vslideup.vi",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vslideup.vx",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vsll.vi",
+ "pipe": "vint",
+ "uop_gen": "ARITH",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vsll.vv",
+ "pipe": "vint",
+ "uop_gen": "ARITH",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vsll.vx",
+ "pipe": "vint",
+ "uop_gen": "ARITH",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vsm.v",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vsmul.vv",
+ "pipe": "vmul",
+ "uop_gen": "ARITH",
+ "latency": 3
+ },
+ {
+ "mnemonic": "vsmul.vx",
+ "pipe": "vmul",
+ "uop_gen": "ARITH",
+ "latency": 3
+ },
+ {
+ "mnemonic": "vsoxei16.v",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vsoxei32.v",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vsoxei64.v",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vsoxei8.v",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vsra.vi",
+ "pipe": "vint",
+ "uop_gen": "ARITH",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vsra.vv",
+ "pipe": "vint",
+ "uop_gen": "ARITH",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vsra.vx",
+ "pipe": "vint",
+ "uop_gen": "ARITH",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vsrl.vi",
+ "pipe": "vint",
+ "uop_gen": "ARITH",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vsrl.vv",
+ "pipe": "vint",
+ "uop_gen": "ARITH",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vsrl.vx",
+ "pipe": "vint",
+ "uop_gen": "ARITH",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vsse16.v",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vsse32.v",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vsse64.v",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vsse8.v",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vssra.vi",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vssra.vv",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vssra.vx",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vssrl.vi",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vssrl.vv",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vssrl.vx",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vssub.vv",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vssub.vx",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vssubu.vv",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vssubu.vx",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vsub.vv",
+ "pipe": "vint",
+ "uop_gen": "ARITH",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vsub.vx",
+ "pipe": "vint",
+ "uop_gen": "ARITH",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vsuxei16.v",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vsuxei32.v",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vsuxei64.v",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vsuxei8.v",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vwadd.vv",
+ "pipe": "vint",
+ "uop_gen": "ARITH_WIDE_DEST",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vwadd.vx",
+ "pipe": "vint",
+ "uop_gen": "ARITH_WIDE_DEST",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vwadd.wv",
+ "pipe": "vint",
+ "uop_gen": "ARITH_WIDE_DEST",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vwadd.wx",
+ "pipe": "vint",
+ "uop_gen": "ARITH_WIDE_DEST",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vwaddu.vv",
+ "pipe": "vint",
+ "uop_gen": "ARITH_WIDE_DEST",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vwaddu.vx",
+ "pipe": "vint",
+ "uop_gen": "ARITH_WIDE_DEST",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vwaddu.wv",
+ "pipe": "vint",
+ "uop_gen": "ARITH_WIDE_DEST",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vwaddu.wx",
+ "pipe": "vint",
+ "uop_gen": "ARITH_WIDE_DEST",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vwmacc.vv",
+ "pipe": "vmul",
+ "uop_gen": "ARITH_MAC_WIDE_DEST",
+ "latency": 3
+ },
+ {
+ "mnemonic": "vwmacc.vx",
+ "pipe": "vmul",
+ "uop_gen": "ARITH_MAC_WIDE_DEST",
+ "latency": 3
+ },
+ {
+ "mnemonic": "vwmaccsu.vv",
+ "pipe": "vmul",
+ "uop_gen": "ARITH_MAC_WIDE_DEST",
+ "latency": 3
+ },
+ {
+ "mnemonic": "vwmaccsu.vx",
+ "pipe": "vmul",
+ "uop_gen": "ARITH_MAC_WIDE_DEST",
+ "latency": 3
+ },
+ {
+ "mnemonic": "vwmaccu.vv",
+ "pipe": "vmul",
+ "uop_gen": "ARITH_MAC_WIDE_DEST",
+ "latency": 3
+ },
+ {
+ "mnemonic": "vwmaccu.vx",
+ "pipe": "vmul",
+ "uop_gen": "ARITH_MAC_WIDE_DEST",
+ "latency": 3
+ },
+ {
+ "mnemonic": "vwmaccus.vx",
+ "pipe": "vmul",
+ "uop_gen": "ARITH_MAC_WIDE_DEST",
+ "latency": 3
+ },
+ {
+ "mnemonic": "vwmul.vv",
+ "pipe": "vmul",
+ "uop_gen": "ARITH_WIDE_DEST",
+ "latency": 3
+ },
+ {
+ "mnemonic": "vwmul.vx",
+ "pipe": "vmul",
+ "uop_gen": "ARITH_WIDE_DEST",
+ "latency": 3
+ },
+ {
+ "mnemonic": "vwmulsu.vv",
+ "pipe": "vmul",
+ "uop_gen": "ARITH_WIDE_DEST",
+ "latency": 3
+ },
+ {
+ "mnemonic": "vwmulsu.vx",
+ "pipe": "vmul",
+ "uop_gen": "ARITH_WIDE_DEST",
+ "latency": 3
+ },
+ {
+ "mnemonic": "vwmulu.vv",
+ "pipe": "vmul",
+ "uop_gen": "ARITH_WIDE_DEST",
+ "latency": 3
+ },
+ {
+ "mnemonic": "vwmulu.vx",
+ "pipe": "vmul",
+ "uop_gen": "ARITH_WIDE_DEST",
+ "latency": 3
+ },
+ {
+ "mnemonic": "vwredsum.vs",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vwredsumu.vs",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vwsub.vv",
+ "pipe": "vint",
+ "uop_gen": "ARITH_WIDE_DEST",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vwsub.vx",
+ "pipe": "vint",
+ "uop_gen": "ARITH_WIDE_DEST",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vwsub.wv",
+ "pipe": "vint",
+ "uop_gen": "ARITH_WIDE_DEST",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vwsub.wx",
+ "pipe": "vint",
+ "uop_gen": "ARITH_WIDE_DEST",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vwsubu.vv",
+ "pipe": "vint",
+ "uop_gen": "ARITH_WIDE_DEST",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vwsubu.vx",
+ "pipe": "vint",
+ "uop_gen": "ARITH_WIDE_DEST",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vwsubu.wv",
+ "pipe": "vint",
+ "uop_gen": "ARITH_WIDE_DEST",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vwsubu.wx",
+ "pipe": "vint",
+ "uop_gen": "ARITH_WIDE_DEST",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vxor.vi",
+ "pipe": "vint",
+ "uop_gen": "ARITH",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vxor.vv",
+ "pipe": "vint",
+ "uop_gen": "ARITH",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vxor.vx",
+ "pipe": "vint",
+ "uop_gen": "ARITH",
+ "latency": 1
+ },
+ {
+ "mnemonic": "vzext.vf2",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vzext.vf4",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ },
+ {
+ "mnemonic": "vzext.vf8",
+ "pipe": "?",
+ "uop_gen": "NONE",
+ "latency": 0
+ }
+]
\ No newline at end of file
diff --git a/arches/medium_core.yaml b/arches/medium_core.yaml
index 8b8b5a86..661f8e47 100644
--- a/arches/medium_core.yaml
+++ b/arches/medium_core.yaml
@@ -21,12 +21,13 @@ top.cpu.core0.extension.core_extensions:
# targets of: "int" and "div"
pipelines:
[
- ["int", "mul", "i2f", "cmov"], # exe0
+ ["sys", "int", "mul", "i2f", "cmov"], # exe0
["int", "div"], # exe1
["int"], # exe2
["float", "faddsub", "fmac"], # exe3
["float", "f2i"], # exe4
- ["br"] # exe5
+ ["br"], # exe5
+ ["vint", "vset", "vdiv", "vmul"] # exe6
]
# this is used to set how many units per queue
@@ -40,7 +41,8 @@ top.cpu.core0.extension.core_extensions:
["0"], # iq0 -> exe0
["1", "2"], # iq1 -> exe1, exe2
["3", "4"], # iq2 -> exe3, exe4
- ["5"] # iq3 -> exe5
+ ["5"], # iq3 -> exe5
+ ["6"]
]
top.cpu.core0.rename.scoreboards:
@@ -48,16 +50,26 @@ top.cpu.core0.rename.scoreboards:
# |
# V
integer.params.latency_matrix: |
- [["", "lsu", "iq0", "iq1", "iq2", "iq3"],
- ["lsu", 1, 1, 1, 1, 1],
- ["iq0", 1, 1, 1, 1, 1],
- ["iq1", 1, 1, 1, 1, 1],
- ["iq2", 1, 1, 1, 1, 1],
- ["iq3", 1, 1, 1, 1, 1]]
+ [["", "lsu", "iq0", "iq1", "iq2", "iq3", "iq4"],
+ ["lsu", 1, 1, 1, 1, 1, 1],
+ ["iq0", 1, 1, 1, 1, 1, 1],
+ ["iq1", 1, 1, 1, 1, 1, 1],
+ ["iq2", 1, 1, 1, 1, 1, 1],
+ ["iq3", 1, 1, 1, 1, 1, 1],
+ ["iq4", 1, 1, 1, 1, 1, 1]]
float.params.latency_matrix: |
- [["", "lsu", "iq0", "iq1", "iq2", "iq3"],
- ["lsu", 1, 1, 1, 1, 1],
- ["iq0", 1, 1, 1, 1, 1],
- ["iq1", 1, 1, 1, 1, 1],
- ["iq2", 1, 1, 1, 1, 1],
- ["iq3", 1, 1, 1, 1, 1]]
\ No newline at end of file
+ [["", "lsu", "iq0", "iq1", "iq2", "iq3", "iq4"],
+ ["lsu", 1, 1, 1, 1, 1, 1],
+ ["iq0", 1, 1, 1, 1, 1, 1],
+ ["iq1", 1, 1, 1, 1, 1, 1],
+ ["iq2", 1, 1, 1, 1, 1, 1],
+ ["iq3", 1, 1, 1, 1, 1, 1],
+ ["iq4", 1, 1, 1, 1, 1, 1]]
+ vector.params.latency_matrix: |
+ [["", "lsu", "iq0", "iq1", "iq2", "iq3", "iq4"],
+ ["lsu", 1, 1, 1, 1, 1, 1],
+ ["iq0", 1, 1, 1, 1, 1, 1],
+ ["iq1", 1, 1, 1, 1, 1, 1],
+ ["iq2", 1, 1, 1, 1, 1, 1],
+ ["iq3", 1, 1, 1, 1, 1, 1],
+ ["iq4", 1, 1, 1, 1, 1, 1]]
diff --git a/arches/small_core.yaml b/arches/small_core.yaml
index 7ad9d7d8..67cb94db 100644
--- a/arches/small_core.yaml
+++ b/arches/small_core.yaml
@@ -18,9 +18,10 @@ top.cpu.core0.extension.core_extensions:
# targets of: "int" and "div"
pipelines:
[
- ["int", "mul", "i2f", "cmov", "div"], # exe0
+ ["sys", "int", "mul", "i2f", "cmov", "div"], # exe0
["float", "faddsub", "fmac", "f2i"], # exe1
- ["br"] # exe2
+ ["br"], # exe2
+ ["vint", "vset", "vdiv", "vmul"] # exe3
]
# this is used to set how many units per queue
# ["0", "3"] means iq0 has exe0, exe1, exe2, and exe3, so it's inclusive
@@ -32,7 +33,8 @@ top.cpu.core0.extension.core_extensions:
[
["0"], # iq0 -> exe0
["1"], # iq1 -> exe1
- ["2"] # iq2 -> exe2
+ ["2"], # iq2 -> exe2
+ ["3"], # iq3 -> exe3
]
top.cpu.core0.rename.scoreboards:
@@ -40,14 +42,23 @@ top.cpu.core0.rename.scoreboards:
# |
# V
integer.params.latency_matrix: |
- [["", "lsu", "iq0", "iq1", "iq2"],
- ["lsu", 1, 1, 1, 1],
- ["iq0", 1, 1, 1, 1],
- ["iq1", 1, 1, 1, 1],
- ["iq2", 1, 1, 1, 1]]
+ [["", "lsu", "iq0", "iq1", "iq2", "iq3"],
+ ["lsu", 1, 1, 1, 1, 1],
+ ["iq0", 1, 1, 1, 1, 1],
+ ["iq1", 1, 1, 1, 1, 1],
+ ["iq2", 1, 1, 1, 1, 1],
+ ["iq3", 1, 1, 1, 1, 1]]
float.params.latency_matrix: |
- [["", "lsu", "iq0", "iq1", "iq2"],
- ["lsu", 1, 1, 1, 1],
- ["iq0", 1, 1, 1, 1],
- ["iq1", 1, 1, 1, 1],
- ["iq2", 1, 1, 1, 1]]
\ No newline at end of file
+ [["", "lsu", "iq0", "iq1", "iq2", "iq3"],
+ ["lsu", 1, 1, 1, 1, 1],
+ ["iq0", 1, 1, 1, 1, 1],
+ ["iq1", 1, 1, 1, 1, 1],
+ ["iq2", 1, 1, 1, 1, 1],
+ ["iq3", 1, 1, 1, 1, 1]]
+ vector.params.latency_matrix: |
+ [["", "lsu", "iq0", "iq1", "iq2", "iq3"],
+ ["lsu", 1, 1, 1, 1, 1],
+ ["iq0", 1, 1, 1, 1, 1],
+ ["iq1", 1, 1, 1, 1, 1],
+ ["iq2", 1, 1, 1, 1, 1],
+ ["iq3", 1, 1, 1, 1, 1]]
diff --git a/cmake-build-debug/.cmake/api/v1/query/cache-v2 b/cmake-build-debug/.cmake/api/v1/query/cache-v2
new file mode 100644
index 00000000..e69de29b
diff --git a/cmake-build-debug/.cmake/api/v1/query/cmakeFiles-v1 b/cmake-build-debug/.cmake/api/v1/query/cmakeFiles-v1
new file mode 100644
index 00000000..e69de29b
diff --git a/cmake-build-debug/.cmake/api/v1/query/codemodel-v2 b/cmake-build-debug/.cmake/api/v1/query/codemodel-v2
new file mode 100644
index 00000000..e69de29b
diff --git a/cmake-build-debug/.cmake/api/v1/query/toolchains-v1 b/cmake-build-debug/.cmake/api/v1/query/toolchains-v1
new file mode 100644
index 00000000..e69de29b
diff --git a/cmake-build-debug/CMakeCache.txt b/cmake-build-debug/CMakeCache.txt
new file mode 100644
index 00000000..ffed8ed2
--- /dev/null
+++ b/cmake-build-debug/CMakeCache.txt
@@ -0,0 +1,339 @@
+# This is the CMakeCache file.
+# For build in directory: /home/shobhit/riscv-perf-model/cmake-build-debug
+# It was generated by CMake: /snap/clion/296/bin/cmake/linux/x64/bin/cmake
+# You can edit this file to change values found and used by cmake.
+# If you do not want to change any of the values, simply exit the editor.
+# If you do want to change a value, simply edit, save, and exit the editor.
+# The syntax for the file is as follows:
+# KEY:TYPE=VALUE
+# KEY is the name of a variable in the cache.
+# TYPE is a hint to GUIs for the type of VALUE, DO NOT EDIT TYPE!.
+# VALUE is the current value for the KEY.
+
+########################
+# EXTERNAL cache entries
+########################
+
+//Path to a program.
+CMAKE_ADDR2LINE:FILEPATH=/usr/bin/addr2line
+
+//Path to a program.
+CMAKE_AR:FILEPATH=/usr/bin/ar
+
+//Choose the type of build, options are: None Debug Release RelWithDebInfo
+// MinSizeRel ...
+CMAKE_BUILD_TYPE:STRING=Debug
+
+//Enable colored diagnostics throughout.
+CMAKE_COLOR_DIAGNOSTICS:BOOL=ON
+
+//No help, variable specified on the command line.
+CMAKE_CXX_COMPILER:UNINITIALIZED=g++
+
+//A wrapper around 'ar' adding the appropriate '--plugin' option
+// for the GCC compiler
+CMAKE_CXX_COMPILER_AR:FILEPATH=/usr/bin/gcc-ar-13
+
+//A wrapper around 'ranlib' adding the appropriate '--plugin' option
+// for the GCC compiler
+CMAKE_CXX_COMPILER_RANLIB:FILEPATH=/usr/bin/gcc-ranlib-13
+
+//Flags used by the CXX compiler during all build types.
+CMAKE_CXX_FLAGS:STRING=
+
+//Flags used by the CXX compiler during DEBUG builds.
+CMAKE_CXX_FLAGS_DEBUG:STRING=-g
+
+//Flags used by the CXX compiler during MINSIZEREL builds.
+CMAKE_CXX_FLAGS_MINSIZEREL:STRING=-Os -DNDEBUG
+
+//Flags used by the CXX compiler during RELEASE builds.
+CMAKE_CXX_FLAGS_RELEASE:STRING=-O3 -DNDEBUG
+
+//Flags used by the CXX compiler during RELWITHDEBINFO builds.
+CMAKE_CXX_FLAGS_RELWITHDEBINFO:STRING=-O2 -g -DNDEBUG
+
+//No help, variable specified on the command line.
+CMAKE_C_COMPILER:UNINITIALIZED=gcc
+
+//Path to a program.
+CMAKE_DLLTOOL:FILEPATH=CMAKE_DLLTOOL-NOTFOUND
+
+//Flags used by the linker during all build types.
+CMAKE_EXE_LINKER_FLAGS:STRING=
+
+//Flags used by the linker during DEBUG builds.
+CMAKE_EXE_LINKER_FLAGS_DEBUG:STRING=
+
+//Flags used by the linker during MINSIZEREL builds.
+CMAKE_EXE_LINKER_FLAGS_MINSIZEREL:STRING=
+
+//Flags used by the linker during RELEASE builds.
+CMAKE_EXE_LINKER_FLAGS_RELEASE:STRING=
+
+//Flags used by the linker during RELWITHDEBINFO builds.
+CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO:STRING=
+
+//Enable/Disable output of compile commands during generation.
+CMAKE_EXPORT_COMPILE_COMMANDS:BOOL=
+
+//Value Computed by CMake.
+CMAKE_FIND_PACKAGE_REDIRECTS_DIR:STATIC=/home/shobhit/riscv-perf-model/cmake-build-debug/CMakeFiles/pkgRedirects
+
+//Install path prefix, prepended onto install directories.
+CMAKE_INSTALL_PREFIX:PATH=/usr/local
+
+//Path to a program.
+CMAKE_LINKER:FILEPATH=/usr/bin/ld
+
+//No help, variable specified on the command line.
+CMAKE_MAKE_PROGRAM:UNINITIALIZED=make
+
+//Flags used by the linker during the creation of modules during
+// all build types.
+CMAKE_MODULE_LINKER_FLAGS:STRING=
+
+//Flags used by the linker during the creation of modules during
+// DEBUG builds.
+CMAKE_MODULE_LINKER_FLAGS_DEBUG:STRING=
+
+//Flags used by the linker during the creation of modules during
+// MINSIZEREL builds.
+CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL:STRING=
+
+//Flags used by the linker during the creation of modules during
+// RELEASE builds.
+CMAKE_MODULE_LINKER_FLAGS_RELEASE:STRING=
+
+//Flags used by the linker during the creation of modules during
+// RELWITHDEBINFO builds.
+CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO:STRING=
+
+//Path to a program.
+CMAKE_NM:FILEPATH=/usr/bin/nm
+
+//Path to a program.
+CMAKE_OBJCOPY:FILEPATH=/usr/bin/objcopy
+
+//Path to a program.
+CMAKE_OBJDUMP:FILEPATH=/usr/bin/objdump
+
+//Value Computed by CMake
+CMAKE_PROJECT_DESCRIPTION:STATIC=
+
+//Value Computed by CMake
+CMAKE_PROJECT_HOMEPAGE_URL:STATIC=
+
+//Value Computed by CMake
+CMAKE_PROJECT_NAME:STATIC=olympia
+
+//Path to a program.
+CMAKE_RANLIB:FILEPATH=/usr/bin/ranlib
+
+//Path to a program.
+CMAKE_READELF:FILEPATH=/usr/bin/readelf
+
+//Flags used by the linker during the creation of shared libraries
+// during all build types.
+CMAKE_SHARED_LINKER_FLAGS:STRING=
+
+//Flags used by the linker during the creation of shared libraries
+// during DEBUG builds.
+CMAKE_SHARED_LINKER_FLAGS_DEBUG:STRING=
+
+//Flags used by the linker during the creation of shared libraries
+// during MINSIZEREL builds.
+CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL:STRING=
+
+//Flags used by the linker during the creation of shared libraries
+// during RELEASE builds.
+CMAKE_SHARED_LINKER_FLAGS_RELEASE:STRING=
+
+//Flags used by the linker during the creation of shared libraries
+// during RELWITHDEBINFO builds.
+CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO:STRING=
+
+//If set, runtime paths are not added when installing shared libraries,
+// but are added when building.
+CMAKE_SKIP_INSTALL_RPATH:BOOL=NO
+
+//If set, runtime paths are not added when using shared libraries.
+CMAKE_SKIP_RPATH:BOOL=NO
+
+//Flags used by the linker during the creation of static libraries
+// during all build types.
+CMAKE_STATIC_LINKER_FLAGS:STRING=
+
+//Flags used by the linker during the creation of static libraries
+// during DEBUG builds.
+CMAKE_STATIC_LINKER_FLAGS_DEBUG:STRING=
+
+//Flags used by the linker during the creation of static libraries
+// during MINSIZEREL builds.
+CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL:STRING=
+
+//Flags used by the linker during the creation of static libraries
+// during RELEASE builds.
+CMAKE_STATIC_LINKER_FLAGS_RELEASE:STRING=
+
+//Flags used by the linker during the creation of static libraries
+// during RELWITHDEBINFO builds.
+CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO:STRING=
+
+//Path to a program.
+CMAKE_STRIP:FILEPATH=/usr/bin/strip
+
+//Path to a program.
+CMAKE_TAPI:FILEPATH=CMAKE_TAPI-NOTFOUND
+
+//If this value is on, makefiles will be generated without the
+// .SILENT directive, and all commands will be echoed to the console
+// during the make. This is useful for debugging only. With Visual
+// Studio IDE projects all commands are done without /nologo.
+CMAKE_VERBOSE_MAKEFILE:BOOL=FALSE
+
+//The directory containing a CMake configuration file for Sparta.
+Sparta_DIR:PATH=Sparta_DIR-NOTFOUND
+
+//Value Computed by CMake
+olympia_BINARY_DIR:STATIC=/home/shobhit/riscv-perf-model/cmake-build-debug
+
+//Value Computed by CMake
+olympia_IS_TOP_LEVEL:STATIC=ON
+
+//Value Computed by CMake
+olympia_SOURCE_DIR:STATIC=/home/shobhit/riscv-perf-model
+
+
+########################
+# INTERNAL cache entries
+########################
+
+//ADVANCED property for variable: CMAKE_ADDR2LINE
+CMAKE_ADDR2LINE-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_AR
+CMAKE_AR-ADVANCED:INTERNAL=1
+//This is the directory where this CMakeCache.txt was created
+CMAKE_CACHEFILE_DIR:INTERNAL=/home/shobhit/riscv-perf-model/cmake-build-debug
+//Major version of cmake used to create the current loaded cache
+CMAKE_CACHE_MAJOR_VERSION:INTERNAL=3
+//Minor version of cmake used to create the current loaded cache
+CMAKE_CACHE_MINOR_VERSION:INTERNAL=29
+//Patch version of cmake used to create the current loaded cache
+CMAKE_CACHE_PATCH_VERSION:INTERNAL=6
+//Path to CMake executable.
+CMAKE_COMMAND:INTERNAL=/snap/clion/296/bin/cmake/linux/x64/bin/cmake
+//Path to cpack program executable.
+CMAKE_CPACK_COMMAND:INTERNAL=/snap/clion/296/bin/cmake/linux/x64/bin/cpack
+//Path to ctest program executable.
+CMAKE_CTEST_COMMAND:INTERNAL=/snap/clion/296/bin/cmake/linux/x64/bin/ctest
+//ADVANCED property for variable: CMAKE_CXX_COMPILER
+CMAKE_CXX_COMPILER-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_CXX_COMPILER_AR
+CMAKE_CXX_COMPILER_AR-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_CXX_COMPILER_RANLIB
+CMAKE_CXX_COMPILER_RANLIB-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_CXX_FLAGS
+CMAKE_CXX_FLAGS-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_CXX_FLAGS_DEBUG
+CMAKE_CXX_FLAGS_DEBUG-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_CXX_FLAGS_MINSIZEREL
+CMAKE_CXX_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_CXX_FLAGS_RELEASE
+CMAKE_CXX_FLAGS_RELEASE-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_CXX_FLAGS_RELWITHDEBINFO
+CMAKE_CXX_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_DLLTOOL
+CMAKE_DLLTOOL-ADVANCED:INTERNAL=1
+//Executable file format
+CMAKE_EXECUTABLE_FORMAT:INTERNAL=ELF
+//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS
+CMAKE_EXE_LINKER_FLAGS-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_DEBUG
+CMAKE_EXE_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_MINSIZEREL
+CMAKE_EXE_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_RELEASE
+CMAKE_EXE_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO
+CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_EXPORT_COMPILE_COMMANDS
+CMAKE_EXPORT_COMPILE_COMMANDS-ADVANCED:INTERNAL=1
+//Name of external makefile project generator.
+CMAKE_EXTRA_GENERATOR:INTERNAL=
+//Name of generator.
+CMAKE_GENERATOR:INTERNAL=Unix Makefiles
+//Generator instance identifier.
+CMAKE_GENERATOR_INSTANCE:INTERNAL=
+//Name of generator platform.
+CMAKE_GENERATOR_PLATFORM:INTERNAL=
+//Name of generator toolset.
+CMAKE_GENERATOR_TOOLSET:INTERNAL=
+//Source directory with the top level CMakeLists.txt file for this
+// project
+CMAKE_HOME_DIRECTORY:INTERNAL=/home/shobhit/riscv-perf-model
+//Install .so files without execute permission.
+CMAKE_INSTALL_SO_NO_EXE:INTERNAL=0
+//ADVANCED property for variable: CMAKE_LINKER
+CMAKE_LINKER-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS
+CMAKE_MODULE_LINKER_FLAGS-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_DEBUG
+CMAKE_MODULE_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL
+CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_RELEASE
+CMAKE_MODULE_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO
+CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_NM
+CMAKE_NM-ADVANCED:INTERNAL=1
+//number of local generators
+CMAKE_NUMBER_OF_MAKEFILES:INTERNAL=1
+//ADVANCED property for variable: CMAKE_OBJCOPY
+CMAKE_OBJCOPY-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_OBJDUMP
+CMAKE_OBJDUMP-ADVANCED:INTERNAL=1
+//Platform information initialized
+CMAKE_PLATFORM_INFO_INITIALIZED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_RANLIB
+CMAKE_RANLIB-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_READELF
+CMAKE_READELF-ADVANCED:INTERNAL=1
+//Path to CMake installation.
+CMAKE_ROOT:INTERNAL=/snap/clion/296/bin/cmake/linux/x64/share/cmake-3.29
+//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS
+CMAKE_SHARED_LINKER_FLAGS-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_DEBUG
+CMAKE_SHARED_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL
+CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_RELEASE
+CMAKE_SHARED_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO
+CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_SKIP_INSTALL_RPATH
+CMAKE_SKIP_INSTALL_RPATH-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_SKIP_RPATH
+CMAKE_SKIP_RPATH-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS
+CMAKE_STATIC_LINKER_FLAGS-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_DEBUG
+CMAKE_STATIC_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL
+CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_RELEASE
+CMAKE_STATIC_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO
+CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_STRIP
+CMAKE_STRIP-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_TAPI
+CMAKE_TAPI-ADVANCED:INTERNAL=1
+//uname command
+CMAKE_UNAME:INTERNAL=/usr/bin/uname
+//ADVANCED property for variable: CMAKE_VERBOSE_MAKEFILE
+CMAKE_VERBOSE_MAKEFILE-ADVANCED:INTERNAL=1
+//linker supports push/pop state
+_CMAKE_LINKER_PUSHPOP_STATE_SUPPORTED:INTERNAL=TRUE
+
diff --git a/cmake-build-debug/CMakeFiles/3.29.6/CMakeCXXCompiler.cmake b/cmake-build-debug/CMakeFiles/3.29.6/CMakeCXXCompiler.cmake
new file mode 100644
index 00000000..adce1e20
--- /dev/null
+++ b/cmake-build-debug/CMakeFiles/3.29.6/CMakeCXXCompiler.cmake
@@ -0,0 +1,92 @@
+set(CMAKE_CXX_COMPILER "/usr/bin/g++")
+set(CMAKE_CXX_COMPILER_ARG1 "")
+set(CMAKE_CXX_COMPILER_ID "GNU")
+set(CMAKE_CXX_COMPILER_VERSION "13.3.0")
+set(CMAKE_CXX_COMPILER_VERSION_INTERNAL "")
+set(CMAKE_CXX_COMPILER_WRAPPER "")
+set(CMAKE_CXX_STANDARD_COMPUTED_DEFAULT "17")
+set(CMAKE_CXX_EXTENSIONS_COMPUTED_DEFAULT "ON")
+set(CMAKE_CXX_COMPILE_FEATURES "cxx_std_98;cxx_template_template_parameters;cxx_std_11;cxx_alias_templates;cxx_alignas;cxx_alignof;cxx_attributes;cxx_auto_type;cxx_constexpr;cxx_decltype;cxx_decltype_incomplete_return_types;cxx_default_function_template_args;cxx_defaulted_functions;cxx_defaulted_move_initializers;cxx_delegating_constructors;cxx_deleted_functions;cxx_enum_forward_declarations;cxx_explicit_conversions;cxx_extended_friend_declarations;cxx_extern_templates;cxx_final;cxx_func_identifier;cxx_generalized_initializers;cxx_inheriting_constructors;cxx_inline_namespaces;cxx_lambdas;cxx_local_type_template_args;cxx_long_long_type;cxx_noexcept;cxx_nonstatic_member_init;cxx_nullptr;cxx_override;cxx_range_for;cxx_raw_string_literals;cxx_reference_qualified_functions;cxx_right_angle_brackets;cxx_rvalue_references;cxx_sizeof_member;cxx_static_assert;cxx_strong_enums;cxx_thread_local;cxx_trailing_return_types;cxx_unicode_literals;cxx_uniform_initialization;cxx_unrestricted_unions;cxx_user_literals;cxx_variadic_macros;cxx_variadic_templates;cxx_std_14;cxx_aggregate_default_initializers;cxx_attribute_deprecated;cxx_binary_literals;cxx_contextual_conversions;cxx_decltype_auto;cxx_digit_separators;cxx_generic_lambdas;cxx_lambda_init_captures;cxx_relaxed_constexpr;cxx_return_type_deduction;cxx_variable_templates;cxx_std_17;cxx_std_20;cxx_std_23")
+set(CMAKE_CXX98_COMPILE_FEATURES "cxx_std_98;cxx_template_template_parameters")
+set(CMAKE_CXX11_COMPILE_FEATURES "cxx_std_11;cxx_alias_templates;cxx_alignas;cxx_alignof;cxx_attributes;cxx_auto_type;cxx_constexpr;cxx_decltype;cxx_decltype_incomplete_return_types;cxx_default_function_template_args;cxx_defaulted_functions;cxx_defaulted_move_initializers;cxx_delegating_constructors;cxx_deleted_functions;cxx_enum_forward_declarations;cxx_explicit_conversions;cxx_extended_friend_declarations;cxx_extern_templates;cxx_final;cxx_func_identifier;cxx_generalized_initializers;cxx_inheriting_constructors;cxx_inline_namespaces;cxx_lambdas;cxx_local_type_template_args;cxx_long_long_type;cxx_noexcept;cxx_nonstatic_member_init;cxx_nullptr;cxx_override;cxx_range_for;cxx_raw_string_literals;cxx_reference_qualified_functions;cxx_right_angle_brackets;cxx_rvalue_references;cxx_sizeof_member;cxx_static_assert;cxx_strong_enums;cxx_thread_local;cxx_trailing_return_types;cxx_unicode_literals;cxx_uniform_initialization;cxx_unrestricted_unions;cxx_user_literals;cxx_variadic_macros;cxx_variadic_templates")
+set(CMAKE_CXX14_COMPILE_FEATURES "cxx_std_14;cxx_aggregate_default_initializers;cxx_attribute_deprecated;cxx_binary_literals;cxx_contextual_conversions;cxx_decltype_auto;cxx_digit_separators;cxx_generic_lambdas;cxx_lambda_init_captures;cxx_relaxed_constexpr;cxx_return_type_deduction;cxx_variable_templates")
+set(CMAKE_CXX17_COMPILE_FEATURES "cxx_std_17")
+set(CMAKE_CXX20_COMPILE_FEATURES "cxx_std_20")
+set(CMAKE_CXX23_COMPILE_FEATURES "cxx_std_23")
+
+set(CMAKE_CXX_PLATFORM_ID "Linux")
+set(CMAKE_CXX_SIMULATE_ID "")
+set(CMAKE_CXX_COMPILER_FRONTEND_VARIANT "GNU")
+set(CMAKE_CXX_SIMULATE_VERSION "")
+
+
+
+
+set(CMAKE_AR "/usr/bin/ar")
+set(CMAKE_CXX_COMPILER_AR "/usr/bin/gcc-ar-13")
+set(CMAKE_RANLIB "/usr/bin/ranlib")
+set(CMAKE_CXX_COMPILER_RANLIB "/usr/bin/gcc-ranlib-13")
+set(CMAKE_LINKER "/usr/bin/ld")
+set(CMAKE_LINKER_LINK "")
+set(CMAKE_LINKER_LLD "")
+set(CMAKE_CXX_COMPILER_LINKER "/usr/lib64/gcc/x86_64-suse-linux/13/../../../../x86_64-suse-linux/bin/ld")
+set(CMAKE_CXX_COMPILER_LINKER_ID "GNU")
+set(CMAKE_CXX_COMPILER_LINKER_VERSION 2.42.0.20240130)
+set(CMAKE_CXX_COMPILER_LINKER_FRONTEND_VARIANT GNU)
+set(CMAKE_MT "")
+set(CMAKE_TAPI "CMAKE_TAPI-NOTFOUND")
+set(CMAKE_COMPILER_IS_GNUCXX 1)
+set(CMAKE_CXX_COMPILER_LOADED 1)
+set(CMAKE_CXX_COMPILER_WORKS TRUE)
+set(CMAKE_CXX_ABI_COMPILED TRUE)
+
+set(CMAKE_CXX_COMPILER_ENV_VAR "CXX")
+
+set(CMAKE_CXX_COMPILER_ID_RUN 1)
+set(CMAKE_CXX_SOURCE_FILE_EXTENSIONS C;M;c++;cc;cpp;cxx;m;mm;mpp;CPP;ixx;cppm;ccm;cxxm;c++m)
+set(CMAKE_CXX_IGNORE_EXTENSIONS inl;h;hpp;HPP;H;o;O;obj;OBJ;def;DEF;rc;RC)
+
+foreach (lang IN ITEMS C OBJC OBJCXX)
+ if (CMAKE_${lang}_COMPILER_ID_RUN)
+ foreach(extension IN LISTS CMAKE_${lang}_SOURCE_FILE_EXTENSIONS)
+ list(REMOVE_ITEM CMAKE_CXX_SOURCE_FILE_EXTENSIONS ${extension})
+ endforeach()
+ endif()
+endforeach()
+
+set(CMAKE_CXX_LINKER_PREFERENCE 30)
+set(CMAKE_CXX_LINKER_PREFERENCE_PROPAGATES 1)
+set(CMAKE_CXX_LINKER_DEPFILE_SUPPORTED FALSE)
+
+# Save compiler ABI information.
+set(CMAKE_CXX_SIZEOF_DATA_PTR "8")
+set(CMAKE_CXX_COMPILER_ABI "ELF")
+set(CMAKE_CXX_BYTE_ORDER "LITTLE_ENDIAN")
+set(CMAKE_CXX_LIBRARY_ARCHITECTURE "")
+
+if(CMAKE_CXX_SIZEOF_DATA_PTR)
+ set(CMAKE_SIZEOF_VOID_P "${CMAKE_CXX_SIZEOF_DATA_PTR}")
+endif()
+
+if(CMAKE_CXX_COMPILER_ABI)
+ set(CMAKE_INTERNAL_PLATFORM_ABI "${CMAKE_CXX_COMPILER_ABI}")
+endif()
+
+if(CMAKE_CXX_LIBRARY_ARCHITECTURE)
+ set(CMAKE_LIBRARY_ARCHITECTURE "")
+endif()
+
+set(CMAKE_CXX_CL_SHOWINCLUDES_PREFIX "")
+if(CMAKE_CXX_CL_SHOWINCLUDES_PREFIX)
+ set(CMAKE_CL_SHOWINCLUDES_PREFIX "${CMAKE_CXX_CL_SHOWINCLUDES_PREFIX}")
+endif()
+
+
+
+
+
+set(CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES "/usr/include/c++/13;/usr/include/c++/13/x86_64-suse-linux;/usr/include/c++/13/backward;/usr/lib64/gcc/x86_64-suse-linux/13/include;/usr/local/include;/usr/lib64/gcc/x86_64-suse-linux/13/include-fixed;/usr/x86_64-suse-linux/include;/usr/include")
+set(CMAKE_CXX_IMPLICIT_LINK_LIBRARIES "stdc++;m;gcc_s;gcc;c;gcc_s;gcc")
+set(CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES "/usr/lib64/gcc/x86_64-suse-linux/13;/usr/lib64;/lib64;/usr/x86_64-suse-linux/lib")
+set(CMAKE_CXX_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "")
+set(CMAKE_CXX_COMPILER_CLANG_RESOURCE_DIR "")
diff --git a/cmake-build-debug/CMakeFiles/3.29.6/CMakeDetermineCompilerABI_CXX.bin b/cmake-build-debug/CMakeFiles/3.29.6/CMakeDetermineCompilerABI_CXX.bin
new file mode 100755
index 00000000..e0cf4a47
Binary files /dev/null and b/cmake-build-debug/CMakeFiles/3.29.6/CMakeDetermineCompilerABI_CXX.bin differ
diff --git a/cmake-build-debug/CMakeFiles/3.29.6/CMakeSystem.cmake b/cmake-build-debug/CMakeFiles/3.29.6/CMakeSystem.cmake
new file mode 100644
index 00000000..168057c7
--- /dev/null
+++ b/cmake-build-debug/CMakeFiles/3.29.6/CMakeSystem.cmake
@@ -0,0 +1,15 @@
+set(CMAKE_HOST_SYSTEM "Linux-6.9.7-1-default")
+set(CMAKE_HOST_SYSTEM_NAME "Linux")
+set(CMAKE_HOST_SYSTEM_VERSION "6.9.7-1-default")
+set(CMAKE_HOST_SYSTEM_PROCESSOR "x86_64")
+
+
+
+set(CMAKE_SYSTEM "Linux-6.9.7-1-default")
+set(CMAKE_SYSTEM_NAME "Linux")
+set(CMAKE_SYSTEM_VERSION "6.9.7-1-default")
+set(CMAKE_SYSTEM_PROCESSOR "x86_64")
+
+set(CMAKE_CROSSCOMPILING "FALSE")
+
+set(CMAKE_SYSTEM_LOADED 1)
diff --git a/cmake-build-debug/CMakeFiles/3.29.6/CompilerIdCXX/CMakeCXXCompilerId.cpp b/cmake-build-debug/CMakeFiles/3.29.6/CompilerIdCXX/CMakeCXXCompilerId.cpp
new file mode 100644
index 00000000..9a5e8f8c
--- /dev/null
+++ b/cmake-build-debug/CMakeFiles/3.29.6/CompilerIdCXX/CMakeCXXCompilerId.cpp
@@ -0,0 +1,878 @@
+/* This source file must have a .cpp extension so that all C++ compilers
+ recognize the extension without flags. Borland does not know .cxx for
+ example. */
+#ifndef __cplusplus
+# error "A C compiler has been selected for C++."
+#endif
+
+#if !defined(__has_include)
+/* If the compiler does not have __has_include, pretend the answer is
+ always no. */
+# define __has_include(x) 0
+#endif
+
+
+/* Version number components: V=Version, R=Revision, P=Patch
+ Version date components: YYYY=Year, MM=Month, DD=Day */
+
+#if defined(__INTEL_COMPILER) || defined(__ICC)
+# define COMPILER_ID "Intel"
+# if defined(_MSC_VER)
+# define SIMULATE_ID "MSVC"
+# endif
+# if defined(__GNUC__)
+# define SIMULATE_ID "GNU"
+# endif
+ /* __INTEL_COMPILER = VRP prior to 2021, and then VVVV for 2021 and later,
+ except that a few beta releases use the old format with V=2021. */
+# if __INTEL_COMPILER < 2021 || __INTEL_COMPILER == 202110 || __INTEL_COMPILER == 202111
+# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER/100)
+# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER/10 % 10)
+# if defined(__INTEL_COMPILER_UPDATE)
+# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER_UPDATE)
+# else
+# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER % 10)
+# endif
+# else
+# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER)
+# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER_UPDATE)
+ /* The third version component from --version is an update index,
+ but no macro is provided for it. */
+# define COMPILER_VERSION_PATCH DEC(0)
+# endif
+# if defined(__INTEL_COMPILER_BUILD_DATE)
+ /* __INTEL_COMPILER_BUILD_DATE = YYYYMMDD */
+# define COMPILER_VERSION_TWEAK DEC(__INTEL_COMPILER_BUILD_DATE)
+# endif
+# if defined(_MSC_VER)
+ /* _MSC_VER = VVRR */
+# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)
+# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)
+# endif
+# if defined(__GNUC__)
+# define SIMULATE_VERSION_MAJOR DEC(__GNUC__)
+# elif defined(__GNUG__)
+# define SIMULATE_VERSION_MAJOR DEC(__GNUG__)
+# endif
+# if defined(__GNUC_MINOR__)
+# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__)
+# endif
+# if defined(__GNUC_PATCHLEVEL__)
+# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__)
+# endif
+
+#elif (defined(__clang__) && defined(__INTEL_CLANG_COMPILER)) || defined(__INTEL_LLVM_COMPILER)
+# define COMPILER_ID "IntelLLVM"
+#if defined(_MSC_VER)
+# define SIMULATE_ID "MSVC"
+#endif
+#if defined(__GNUC__)
+# define SIMULATE_ID "GNU"
+#endif
+/* __INTEL_LLVM_COMPILER = VVVVRP prior to 2021.2.0, VVVVRRPP for 2021.2.0 and
+ * later. Look for 6 digit vs. 8 digit version number to decide encoding.
+ * VVVV is no smaller than the current year when a version is released.
+ */
+#if __INTEL_LLVM_COMPILER < 1000000L
+# define COMPILER_VERSION_MAJOR DEC(__INTEL_LLVM_COMPILER/100)
+# define COMPILER_VERSION_MINOR DEC(__INTEL_LLVM_COMPILER/10 % 10)
+# define COMPILER_VERSION_PATCH DEC(__INTEL_LLVM_COMPILER % 10)
+#else
+# define COMPILER_VERSION_MAJOR DEC(__INTEL_LLVM_COMPILER/10000)
+# define COMPILER_VERSION_MINOR DEC(__INTEL_LLVM_COMPILER/100 % 100)
+# define COMPILER_VERSION_PATCH DEC(__INTEL_LLVM_COMPILER % 100)
+#endif
+#if defined(_MSC_VER)
+ /* _MSC_VER = VVRR */
+# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)
+# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)
+#endif
+#if defined(__GNUC__)
+# define SIMULATE_VERSION_MAJOR DEC(__GNUC__)
+#elif defined(__GNUG__)
+# define SIMULATE_VERSION_MAJOR DEC(__GNUG__)
+#endif
+#if defined(__GNUC_MINOR__)
+# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__)
+#endif
+#if defined(__GNUC_PATCHLEVEL__)
+# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__)
+#endif
+
+#elif defined(__PATHCC__)
+# define COMPILER_ID "PathScale"
+# define COMPILER_VERSION_MAJOR DEC(__PATHCC__)
+# define COMPILER_VERSION_MINOR DEC(__PATHCC_MINOR__)
+# if defined(__PATHCC_PATCHLEVEL__)
+# define COMPILER_VERSION_PATCH DEC(__PATHCC_PATCHLEVEL__)
+# endif
+
+#elif defined(__BORLANDC__) && defined(__CODEGEARC_VERSION__)
+# define COMPILER_ID "Embarcadero"
+# define COMPILER_VERSION_MAJOR HEX(__CODEGEARC_VERSION__>>24 & 0x00FF)
+# define COMPILER_VERSION_MINOR HEX(__CODEGEARC_VERSION__>>16 & 0x00FF)
+# define COMPILER_VERSION_PATCH DEC(__CODEGEARC_VERSION__ & 0xFFFF)
+
+#elif defined(__BORLANDC__)
+# define COMPILER_ID "Borland"
+ /* __BORLANDC__ = 0xVRR */
+# define COMPILER_VERSION_MAJOR HEX(__BORLANDC__>>8)
+# define COMPILER_VERSION_MINOR HEX(__BORLANDC__ & 0xFF)
+
+#elif defined(__WATCOMC__) && __WATCOMC__ < 1200
+# define COMPILER_ID "Watcom"
+ /* __WATCOMC__ = VVRR */
+# define COMPILER_VERSION_MAJOR DEC(__WATCOMC__ / 100)
+# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10)
+# if (__WATCOMC__ % 10) > 0
+# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10)
+# endif
+
+#elif defined(__WATCOMC__)
+# define COMPILER_ID "OpenWatcom"
+ /* __WATCOMC__ = VVRP + 1100 */
+# define COMPILER_VERSION_MAJOR DEC((__WATCOMC__ - 1100) / 100)
+# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10)
+# if (__WATCOMC__ % 10) > 0
+# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10)
+# endif
+
+#elif defined(__SUNPRO_CC)
+# define COMPILER_ID "SunPro"
+# if __SUNPRO_CC >= 0x5100
+ /* __SUNPRO_CC = 0xVRRP */
+# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>12)
+# define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xFF)
+# define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC & 0xF)
+# else
+ /* __SUNPRO_CC = 0xVRP */
+# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>8)
+# define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xF)
+# define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC & 0xF)
+# endif
+
+#elif defined(__HP_aCC)
+# define COMPILER_ID "HP"
+ /* __HP_aCC = VVRRPP */
+# define COMPILER_VERSION_MAJOR DEC(__HP_aCC/10000)
+# define COMPILER_VERSION_MINOR DEC(__HP_aCC/100 % 100)
+# define COMPILER_VERSION_PATCH DEC(__HP_aCC % 100)
+
+#elif defined(__DECCXX)
+# define COMPILER_ID "Compaq"
+ /* __DECCXX_VER = VVRRTPPPP */
+# define COMPILER_VERSION_MAJOR DEC(__DECCXX_VER/10000000)
+# define COMPILER_VERSION_MINOR DEC(__DECCXX_VER/100000 % 100)
+# define COMPILER_VERSION_PATCH DEC(__DECCXX_VER % 10000)
+
+#elif defined(__IBMCPP__) && defined(__COMPILER_VER__)
+# define COMPILER_ID "zOS"
+ /* __IBMCPP__ = VRP */
+# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100)
+# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10)
+# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10)
+
+#elif defined(__open_xl__) && defined(__clang__)
+# define COMPILER_ID "IBMClang"
+# define COMPILER_VERSION_MAJOR DEC(__open_xl_version__)
+# define COMPILER_VERSION_MINOR DEC(__open_xl_release__)
+# define COMPILER_VERSION_PATCH DEC(__open_xl_modification__)
+# define COMPILER_VERSION_TWEAK DEC(__open_xl_ptf_fix_level__)
+
+
+#elif defined(__ibmxl__) && defined(__clang__)
+# define COMPILER_ID "XLClang"
+# define COMPILER_VERSION_MAJOR DEC(__ibmxl_version__)
+# define COMPILER_VERSION_MINOR DEC(__ibmxl_release__)
+# define COMPILER_VERSION_PATCH DEC(__ibmxl_modification__)
+# define COMPILER_VERSION_TWEAK DEC(__ibmxl_ptf_fix_level__)
+
+
+#elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ >= 800
+# define COMPILER_ID "XL"
+ /* __IBMCPP__ = VRP */
+# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100)
+# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10)
+# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10)
+
+#elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ < 800
+# define COMPILER_ID "VisualAge"
+ /* __IBMCPP__ = VRP */
+# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100)
+# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10)
+# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10)
+
+#elif defined(__NVCOMPILER)
+# define COMPILER_ID "NVHPC"
+# define COMPILER_VERSION_MAJOR DEC(__NVCOMPILER_MAJOR__)
+# define COMPILER_VERSION_MINOR DEC(__NVCOMPILER_MINOR__)
+# if defined(__NVCOMPILER_PATCHLEVEL__)
+# define COMPILER_VERSION_PATCH DEC(__NVCOMPILER_PATCHLEVEL__)
+# endif
+
+#elif defined(__PGI)
+# define COMPILER_ID "PGI"
+# define COMPILER_VERSION_MAJOR DEC(__PGIC__)
+# define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__)
+# if defined(__PGIC_PATCHLEVEL__)
+# define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__)
+# endif
+
+#elif defined(__clang__) && defined(__cray__)
+# define COMPILER_ID "CrayClang"
+# define COMPILER_VERSION_MAJOR DEC(__cray_major__)
+# define COMPILER_VERSION_MINOR DEC(__cray_minor__)
+# define COMPILER_VERSION_PATCH DEC(__cray_patchlevel__)
+# define COMPILER_VERSION_INTERNAL_STR __clang_version__
+
+
+#elif defined(_CRAYC)
+# define COMPILER_ID "Cray"
+# define COMPILER_VERSION_MAJOR DEC(_RELEASE_MAJOR)
+# define COMPILER_VERSION_MINOR DEC(_RELEASE_MINOR)
+
+#elif defined(__TI_COMPILER_VERSION__)
+# define COMPILER_ID "TI"
+ /* __TI_COMPILER_VERSION__ = VVVRRRPPP */
+# define COMPILER_VERSION_MAJOR DEC(__TI_COMPILER_VERSION__/1000000)
+# define COMPILER_VERSION_MINOR DEC(__TI_COMPILER_VERSION__/1000 % 1000)
+# define COMPILER_VERSION_PATCH DEC(__TI_COMPILER_VERSION__ % 1000)
+
+#elif defined(__CLANG_FUJITSU)
+# define COMPILER_ID "FujitsuClang"
+# define COMPILER_VERSION_MAJOR DEC(__FCC_major__)
+# define COMPILER_VERSION_MINOR DEC(__FCC_minor__)
+# define COMPILER_VERSION_PATCH DEC(__FCC_patchlevel__)
+# define COMPILER_VERSION_INTERNAL_STR __clang_version__
+
+
+#elif defined(__FUJITSU)
+# define COMPILER_ID "Fujitsu"
+# if defined(__FCC_version__)
+# define COMPILER_VERSION __FCC_version__
+# elif defined(__FCC_major__)
+# define COMPILER_VERSION_MAJOR DEC(__FCC_major__)
+# define COMPILER_VERSION_MINOR DEC(__FCC_minor__)
+# define COMPILER_VERSION_PATCH DEC(__FCC_patchlevel__)
+# endif
+# if defined(__fcc_version)
+# define COMPILER_VERSION_INTERNAL DEC(__fcc_version)
+# elif defined(__FCC_VERSION)
+# define COMPILER_VERSION_INTERNAL DEC(__FCC_VERSION)
+# endif
+
+
+#elif defined(__ghs__)
+# define COMPILER_ID "GHS"
+/* __GHS_VERSION_NUMBER = VVVVRP */
+# ifdef __GHS_VERSION_NUMBER
+# define COMPILER_VERSION_MAJOR DEC(__GHS_VERSION_NUMBER / 100)
+# define COMPILER_VERSION_MINOR DEC(__GHS_VERSION_NUMBER / 10 % 10)
+# define COMPILER_VERSION_PATCH DEC(__GHS_VERSION_NUMBER % 10)
+# endif
+
+#elif defined(__TASKING__)
+# define COMPILER_ID "Tasking"
+ # define COMPILER_VERSION_MAJOR DEC(__VERSION__/1000)
+ # define COMPILER_VERSION_MINOR DEC(__VERSION__ % 100)
+# define COMPILER_VERSION_INTERNAL DEC(__VERSION__)
+
+#elif defined(__ORANGEC__)
+# define COMPILER_ID "OrangeC"
+# define COMPILER_VERSION_MAJOR DEC(__ORANGEC_MAJOR__)
+# define COMPILER_VERSION_MINOR DEC(__ORANGEC_MINOR__)
+# define COMPILER_VERSION_PATCH DEC(__ORANGEC_PATCHLEVEL__)
+
+#elif defined(__SCO_VERSION__)
+# define COMPILER_ID "SCO"
+
+#elif defined(__ARMCC_VERSION) && !defined(__clang__)
+# define COMPILER_ID "ARMCC"
+#if __ARMCC_VERSION >= 1000000
+ /* __ARMCC_VERSION = VRRPPPP */
+ # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/1000000)
+ # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 100)
+ # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000)
+#else
+ /* __ARMCC_VERSION = VRPPPP */
+ # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/100000)
+ # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 10)
+ # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000)
+#endif
+
+
+#elif defined(__clang__) && defined(__apple_build_version__)
+# define COMPILER_ID "AppleClang"
+# if defined(_MSC_VER)
+# define SIMULATE_ID "MSVC"
+# endif
+# define COMPILER_VERSION_MAJOR DEC(__clang_major__)
+# define COMPILER_VERSION_MINOR DEC(__clang_minor__)
+# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__)
+# if defined(_MSC_VER)
+ /* _MSC_VER = VVRR */
+# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)
+# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)
+# endif
+# define COMPILER_VERSION_TWEAK DEC(__apple_build_version__)
+
+#elif defined(__clang__) && defined(__ARMCOMPILER_VERSION)
+# define COMPILER_ID "ARMClang"
+ # define COMPILER_VERSION_MAJOR DEC(__ARMCOMPILER_VERSION/1000000)
+ # define COMPILER_VERSION_MINOR DEC(__ARMCOMPILER_VERSION/10000 % 100)
+ # define COMPILER_VERSION_PATCH DEC(__ARMCOMPILER_VERSION/100 % 100)
+# define COMPILER_VERSION_INTERNAL DEC(__ARMCOMPILER_VERSION)
+
+#elif defined(__clang__) && defined(__ti__)
+# define COMPILER_ID "TIClang"
+ # define COMPILER_VERSION_MAJOR DEC(__ti_major__)
+ # define COMPILER_VERSION_MINOR DEC(__ti_minor__)
+ # define COMPILER_VERSION_PATCH DEC(__ti_patchlevel__)
+# define COMPILER_VERSION_INTERNAL DEC(__ti_version__)
+
+#elif defined(__clang__)
+# define COMPILER_ID "Clang"
+# if defined(_MSC_VER)
+# define SIMULATE_ID "MSVC"
+# endif
+# define COMPILER_VERSION_MAJOR DEC(__clang_major__)
+# define COMPILER_VERSION_MINOR DEC(__clang_minor__)
+# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__)
+# if defined(_MSC_VER)
+ /* _MSC_VER = VVRR */
+# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)
+# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)
+# endif
+
+#elif defined(__LCC__) && (defined(__GNUC__) || defined(__GNUG__) || defined(__MCST__))
+# define COMPILER_ID "LCC"
+# define COMPILER_VERSION_MAJOR DEC(__LCC__ / 100)
+# define COMPILER_VERSION_MINOR DEC(__LCC__ % 100)
+# if defined(__LCC_MINOR__)
+# define COMPILER_VERSION_PATCH DEC(__LCC_MINOR__)
+# endif
+# if defined(__GNUC__) && defined(__GNUC_MINOR__)
+# define SIMULATE_ID "GNU"
+# define SIMULATE_VERSION_MAJOR DEC(__GNUC__)
+# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__)
+# if defined(__GNUC_PATCHLEVEL__)
+# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__)
+# endif
+# endif
+
+#elif defined(__GNUC__) || defined(__GNUG__)
+# define COMPILER_ID "GNU"
+# if defined(__GNUC__)
+# define COMPILER_VERSION_MAJOR DEC(__GNUC__)
+# else
+# define COMPILER_VERSION_MAJOR DEC(__GNUG__)
+# endif
+# if defined(__GNUC_MINOR__)
+# define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__)
+# endif
+# if defined(__GNUC_PATCHLEVEL__)
+# define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__)
+# endif
+
+#elif defined(_MSC_VER)
+# define COMPILER_ID "MSVC"
+ /* _MSC_VER = VVRR */
+# define COMPILER_VERSION_MAJOR DEC(_MSC_VER / 100)
+# define COMPILER_VERSION_MINOR DEC(_MSC_VER % 100)
+# if defined(_MSC_FULL_VER)
+# if _MSC_VER >= 1400
+ /* _MSC_FULL_VER = VVRRPPPPP */
+# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 100000)
+# else
+ /* _MSC_FULL_VER = VVRRPPPP */
+# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 10000)
+# endif
+# endif
+# if defined(_MSC_BUILD)
+# define COMPILER_VERSION_TWEAK DEC(_MSC_BUILD)
+# endif
+
+#elif defined(_ADI_COMPILER)
+# define COMPILER_ID "ADSP"
+#if defined(__VERSIONNUM__)
+ /* __VERSIONNUM__ = 0xVVRRPPTT */
+# define COMPILER_VERSION_MAJOR DEC(__VERSIONNUM__ >> 24 & 0xFF)
+# define COMPILER_VERSION_MINOR DEC(__VERSIONNUM__ >> 16 & 0xFF)
+# define COMPILER_VERSION_PATCH DEC(__VERSIONNUM__ >> 8 & 0xFF)
+# define COMPILER_VERSION_TWEAK DEC(__VERSIONNUM__ & 0xFF)
+#endif
+
+#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC)
+# define COMPILER_ID "IAR"
+# if defined(__VER__) && defined(__ICCARM__)
+# define COMPILER_VERSION_MAJOR DEC((__VER__) / 1000000)
+# define COMPILER_VERSION_MINOR DEC(((__VER__) / 1000) % 1000)
+# define COMPILER_VERSION_PATCH DEC((__VER__) % 1000)
+# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__)
+# elif defined(__VER__) && (defined(__ICCAVR__) || defined(__ICCRX__) || defined(__ICCRH850__) || defined(__ICCRL78__) || defined(__ICC430__) || defined(__ICCRISCV__) || defined(__ICCV850__) || defined(__ICC8051__) || defined(__ICCSTM8__))
+# define COMPILER_VERSION_MAJOR DEC((__VER__) / 100)
+# define COMPILER_VERSION_MINOR DEC((__VER__) - (((__VER__) / 100)*100))
+# define COMPILER_VERSION_PATCH DEC(__SUBVERSION__)
+# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__)
+# endif
+
+
+/* These compilers are either not known or too old to define an
+ identification macro. Try to identify the platform and guess that
+ it is the native compiler. */
+#elif defined(__hpux) || defined(__hpua)
+# define COMPILER_ID "HP"
+
+#else /* unknown compiler */
+# define COMPILER_ID ""
+#endif
+
+/* Construct the string literal in pieces to prevent the source from
+ getting matched. Store it in a pointer rather than an array
+ because some compilers will just produce instructions to fill the
+ array rather than assigning a pointer to a static array. */
+char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]";
+#ifdef SIMULATE_ID
+char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]";
+#endif
+
+#ifdef __QNXNTO__
+char const* qnxnto = "INFO" ":" "qnxnto[]";
+#endif
+
+#if defined(__CRAYXT_COMPUTE_LINUX_TARGET)
+char const *info_cray = "INFO" ":" "compiler_wrapper[CrayPrgEnv]";
+#endif
+
+#define STRINGIFY_HELPER(X) #X
+#define STRINGIFY(X) STRINGIFY_HELPER(X)
+
+/* Identify known platforms by name. */
+#if defined(__linux) || defined(__linux__) || defined(linux)
+# define PLATFORM_ID "Linux"
+
+#elif defined(__MSYS__)
+# define PLATFORM_ID "MSYS"
+
+#elif defined(__CYGWIN__)
+# define PLATFORM_ID "Cygwin"
+
+#elif defined(__MINGW32__)
+# define PLATFORM_ID "MinGW"
+
+#elif defined(__APPLE__)
+# define PLATFORM_ID "Darwin"
+
+#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32)
+# define PLATFORM_ID "Windows"
+
+#elif defined(__FreeBSD__) || defined(__FreeBSD)
+# define PLATFORM_ID "FreeBSD"
+
+#elif defined(__NetBSD__) || defined(__NetBSD)
+# define PLATFORM_ID "NetBSD"
+
+#elif defined(__OpenBSD__) || defined(__OPENBSD)
+# define PLATFORM_ID "OpenBSD"
+
+#elif defined(__sun) || defined(sun)
+# define PLATFORM_ID "SunOS"
+
+#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__)
+# define PLATFORM_ID "AIX"
+
+#elif defined(__hpux) || defined(__hpux__)
+# define PLATFORM_ID "HP-UX"
+
+#elif defined(__HAIKU__)
+# define PLATFORM_ID "Haiku"
+
+#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS)
+# define PLATFORM_ID "BeOS"
+
+#elif defined(__QNX__) || defined(__QNXNTO__)
+# define PLATFORM_ID "QNX"
+
+#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__)
+# define PLATFORM_ID "Tru64"
+
+#elif defined(__riscos) || defined(__riscos__)
+# define PLATFORM_ID "RISCos"
+
+#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__)
+# define PLATFORM_ID "SINIX"
+
+#elif defined(__UNIX_SV__)
+# define PLATFORM_ID "UNIX_SV"
+
+#elif defined(__bsdos__)
+# define PLATFORM_ID "BSDOS"
+
+#elif defined(_MPRAS) || defined(MPRAS)
+# define PLATFORM_ID "MP-RAS"
+
+#elif defined(__osf) || defined(__osf__)
+# define PLATFORM_ID "OSF1"
+
+#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv)
+# define PLATFORM_ID "SCO_SV"
+
+#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX)
+# define PLATFORM_ID "ULTRIX"
+
+#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX)
+# define PLATFORM_ID "Xenix"
+
+#elif defined(__WATCOMC__)
+# if defined(__LINUX__)
+# define PLATFORM_ID "Linux"
+
+# elif defined(__DOS__)
+# define PLATFORM_ID "DOS"
+
+# elif defined(__OS2__)
+# define PLATFORM_ID "OS2"
+
+# elif defined(__WINDOWS__)
+# define PLATFORM_ID "Windows3x"
+
+# elif defined(__VXWORKS__)
+# define PLATFORM_ID "VxWorks"
+
+# else /* unknown platform */
+# define PLATFORM_ID
+# endif
+
+#elif defined(__INTEGRITY)
+# if defined(INT_178B)
+# define PLATFORM_ID "Integrity178"
+
+# else /* regular Integrity */
+# define PLATFORM_ID "Integrity"
+# endif
+
+# elif defined(_ADI_COMPILER)
+# define PLATFORM_ID "ADSP"
+
+#else /* unknown platform */
+# define PLATFORM_ID
+
+#endif
+
+/* For windows compilers MSVC and Intel we can determine
+ the architecture of the compiler being used. This is because
+ the compilers do not have flags that can change the architecture,
+ but rather depend on which compiler is being used
+*/
+#if defined(_WIN32) && defined(_MSC_VER)
+# if defined(_M_IA64)
+# define ARCHITECTURE_ID "IA64"
+
+# elif defined(_M_ARM64EC)
+# define ARCHITECTURE_ID "ARM64EC"
+
+# elif defined(_M_X64) || defined(_M_AMD64)
+# define ARCHITECTURE_ID "x64"
+
+# elif defined(_M_IX86)
+# define ARCHITECTURE_ID "X86"
+
+# elif defined(_M_ARM64)
+# define ARCHITECTURE_ID "ARM64"
+
+# elif defined(_M_ARM)
+# if _M_ARM == 4
+# define ARCHITECTURE_ID "ARMV4I"
+# elif _M_ARM == 5
+# define ARCHITECTURE_ID "ARMV5I"
+# else
+# define ARCHITECTURE_ID "ARMV" STRINGIFY(_M_ARM)
+# endif
+
+# elif defined(_M_MIPS)
+# define ARCHITECTURE_ID "MIPS"
+
+# elif defined(_M_SH)
+# define ARCHITECTURE_ID "SHx"
+
+# else /* unknown architecture */
+# define ARCHITECTURE_ID ""
+# endif
+
+#elif defined(__WATCOMC__)
+# if defined(_M_I86)
+# define ARCHITECTURE_ID "I86"
+
+# elif defined(_M_IX86)
+# define ARCHITECTURE_ID "X86"
+
+# else /* unknown architecture */
+# define ARCHITECTURE_ID ""
+# endif
+
+#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC)
+# if defined(__ICCARM__)
+# define ARCHITECTURE_ID "ARM"
+
+# elif defined(__ICCRX__)
+# define ARCHITECTURE_ID "RX"
+
+# elif defined(__ICCRH850__)
+# define ARCHITECTURE_ID "RH850"
+
+# elif defined(__ICCRL78__)
+# define ARCHITECTURE_ID "RL78"
+
+# elif defined(__ICCRISCV__)
+# define ARCHITECTURE_ID "RISCV"
+
+# elif defined(__ICCAVR__)
+# define ARCHITECTURE_ID "AVR"
+
+# elif defined(__ICC430__)
+# define ARCHITECTURE_ID "MSP430"
+
+# elif defined(__ICCV850__)
+# define ARCHITECTURE_ID "V850"
+
+# elif defined(__ICC8051__)
+# define ARCHITECTURE_ID "8051"
+
+# elif defined(__ICCSTM8__)
+# define ARCHITECTURE_ID "STM8"
+
+# else /* unknown architecture */
+# define ARCHITECTURE_ID ""
+# endif
+
+#elif defined(__ghs__)
+# if defined(__PPC64__)
+# define ARCHITECTURE_ID "PPC64"
+
+# elif defined(__ppc__)
+# define ARCHITECTURE_ID "PPC"
+
+# elif defined(__ARM__)
+# define ARCHITECTURE_ID "ARM"
+
+# elif defined(__x86_64__)
+# define ARCHITECTURE_ID "x64"
+
+# elif defined(__i386__)
+# define ARCHITECTURE_ID "X86"
+
+# else /* unknown architecture */
+# define ARCHITECTURE_ID ""
+# endif
+
+#elif defined(__clang__) && defined(__ti__)
+# if defined(__ARM_ARCH)
+# define ARCHITECTURE_ID "Arm"
+
+# else /* unknown architecture */
+# define ARCHITECTURE_ID ""
+# endif
+
+#elif defined(__TI_COMPILER_VERSION__)
+# if defined(__TI_ARM__)
+# define ARCHITECTURE_ID "ARM"
+
+# elif defined(__MSP430__)
+# define ARCHITECTURE_ID "MSP430"
+
+# elif defined(__TMS320C28XX__)
+# define ARCHITECTURE_ID "TMS320C28x"
+
+# elif defined(__TMS320C6X__) || defined(_TMS320C6X)
+# define ARCHITECTURE_ID "TMS320C6x"
+
+# else /* unknown architecture */
+# define ARCHITECTURE_ID ""
+# endif
+
+# elif defined(__ADSPSHARC__)
+# define ARCHITECTURE_ID "SHARC"
+
+# elif defined(__ADSPBLACKFIN__)
+# define ARCHITECTURE_ID "Blackfin"
+
+#elif defined(__TASKING__)
+
+# if defined(__CTC__) || defined(__CPTC__)
+# define ARCHITECTURE_ID "TriCore"
+
+# elif defined(__CMCS__)
+# define ARCHITECTURE_ID "MCS"
+
+# elif defined(__CARM__)
+# define ARCHITECTURE_ID "ARM"
+
+# elif defined(__CARC__)
+# define ARCHITECTURE_ID "ARC"
+
+# elif defined(__C51__)
+# define ARCHITECTURE_ID "8051"
+
+# elif defined(__CPCP__)
+# define ARCHITECTURE_ID "PCP"
+
+# else
+# define ARCHITECTURE_ID ""
+# endif
+
+#else
+# define ARCHITECTURE_ID
+#endif
+
+/* Convert integer to decimal digit literals. */
+#define DEC(n) \
+ ('0' + (((n) / 10000000)%10)), \
+ ('0' + (((n) / 1000000)%10)), \
+ ('0' + (((n) / 100000)%10)), \
+ ('0' + (((n) / 10000)%10)), \
+ ('0' + (((n) / 1000)%10)), \
+ ('0' + (((n) / 100)%10)), \
+ ('0' + (((n) / 10)%10)), \
+ ('0' + ((n) % 10))
+
+/* Convert integer to hex digit literals. */
+#define HEX(n) \
+ ('0' + ((n)>>28 & 0xF)), \
+ ('0' + ((n)>>24 & 0xF)), \
+ ('0' + ((n)>>20 & 0xF)), \
+ ('0' + ((n)>>16 & 0xF)), \
+ ('0' + ((n)>>12 & 0xF)), \
+ ('0' + ((n)>>8 & 0xF)), \
+ ('0' + ((n)>>4 & 0xF)), \
+ ('0' + ((n) & 0xF))
+
+/* Construct a string literal encoding the version number. */
+#ifdef COMPILER_VERSION
+char const* info_version = "INFO" ":" "compiler_version[" COMPILER_VERSION "]";
+
+/* Construct a string literal encoding the version number components. */
+#elif defined(COMPILER_VERSION_MAJOR)
+char const info_version[] = {
+ 'I', 'N', 'F', 'O', ':',
+ 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[',
+ COMPILER_VERSION_MAJOR,
+# ifdef COMPILER_VERSION_MINOR
+ '.', COMPILER_VERSION_MINOR,
+# ifdef COMPILER_VERSION_PATCH
+ '.', COMPILER_VERSION_PATCH,
+# ifdef COMPILER_VERSION_TWEAK
+ '.', COMPILER_VERSION_TWEAK,
+# endif
+# endif
+# endif
+ ']','\0'};
+#endif
+
+/* Construct a string literal encoding the internal version number. */
+#ifdef COMPILER_VERSION_INTERNAL
+char const info_version_internal[] = {
+ 'I', 'N', 'F', 'O', ':',
+ 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','_',
+ 'i','n','t','e','r','n','a','l','[',
+ COMPILER_VERSION_INTERNAL,']','\0'};
+#elif defined(COMPILER_VERSION_INTERNAL_STR)
+char const* info_version_internal = "INFO" ":" "compiler_version_internal[" COMPILER_VERSION_INTERNAL_STR "]";
+#endif
+
+/* Construct a string literal encoding the version number components. */
+#ifdef SIMULATE_VERSION_MAJOR
+char const info_simulate_version[] = {
+ 'I', 'N', 'F', 'O', ':',
+ 's','i','m','u','l','a','t','e','_','v','e','r','s','i','o','n','[',
+ SIMULATE_VERSION_MAJOR,
+# ifdef SIMULATE_VERSION_MINOR
+ '.', SIMULATE_VERSION_MINOR,
+# ifdef SIMULATE_VERSION_PATCH
+ '.', SIMULATE_VERSION_PATCH,
+# ifdef SIMULATE_VERSION_TWEAK
+ '.', SIMULATE_VERSION_TWEAK,
+# endif
+# endif
+# endif
+ ']','\0'};
+#endif
+
+/* Construct the string literal in pieces to prevent the source from
+ getting matched. Store it in a pointer rather than an array
+ because some compilers will just produce instructions to fill the
+ array rather than assigning a pointer to a static array. */
+char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]";
+char const* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]";
+
+
+
+#if defined(__INTEL_COMPILER) && defined(_MSVC_LANG) && _MSVC_LANG < 201403L
+# if defined(__INTEL_CXX11_MODE__)
+# if defined(__cpp_aggregate_nsdmi)
+# define CXX_STD 201402L
+# else
+# define CXX_STD 201103L
+# endif
+# else
+# define CXX_STD 199711L
+# endif
+#elif defined(_MSC_VER) && defined(_MSVC_LANG)
+# define CXX_STD _MSVC_LANG
+#else
+# define CXX_STD __cplusplus
+#endif
+
+const char* info_language_standard_default = "INFO" ":" "standard_default["
+#if CXX_STD > 202002L
+ "23"
+#elif CXX_STD > 201703L
+ "20"
+#elif CXX_STD >= 201703L
+ "17"
+#elif CXX_STD >= 201402L
+ "14"
+#elif CXX_STD >= 201103L
+ "11"
+#else
+ "98"
+#endif
+"]";
+
+const char* info_language_extensions_default = "INFO" ":" "extensions_default["
+#if (defined(__clang__) || defined(__GNUC__) || defined(__xlC__) || \
+ defined(__TI_COMPILER_VERSION__)) && \
+ !defined(__STRICT_ANSI__)
+ "ON"
+#else
+ "OFF"
+#endif
+"]";
+
+/*--------------------------------------------------------------------------*/
+
+int main(int argc, char* argv[])
+{
+ int require = 0;
+ require += info_compiler[argc];
+ require += info_platform[argc];
+ require += info_arch[argc];
+#ifdef COMPILER_VERSION_MAJOR
+ require += info_version[argc];
+#endif
+#ifdef COMPILER_VERSION_INTERNAL
+ require += info_version_internal[argc];
+#endif
+#ifdef SIMULATE_ID
+ require += info_simulate[argc];
+#endif
+#ifdef SIMULATE_VERSION_MAJOR
+ require += info_simulate_version[argc];
+#endif
+#if defined(__CRAYXT_COMPUTE_LINUX_TARGET)
+ require += info_cray[argc];
+#endif
+ require += info_language_standard_default[argc];
+ require += info_language_extensions_default[argc];
+ (void)argv;
+ return require;
+}
diff --git a/cmake-build-debug/CMakeFiles/CMakeConfigureLog.yaml b/cmake-build-debug/CMakeFiles/CMakeConfigureLog.yaml
new file mode 100644
index 00000000..82b6a70a
--- /dev/null
+++ b/cmake-build-debug/CMakeFiles/CMakeConfigureLog.yaml
@@ -0,0 +1,281 @@
+
+---
+events:
+ -
+ kind: "message-v1"
+ backtrace:
+ - "/snap/clion/292/bin/cmake/linux/x64/share/cmake-3.29/Modules/CMakeDetermineSystem.cmake:205 (message)"
+ - "CMakeLists.txt:5 (project)"
+ message: |
+ The system is: Linux - 6.9.7-1-default - x86_64
+ -
+ kind: "message-v1"
+ backtrace:
+ - "/snap/clion/292/bin/cmake/linux/x64/share/cmake-3.29/Modules/CMakeDetermineCompilerId.cmake:17 (message)"
+ - "/snap/clion/292/bin/cmake/linux/x64/share/cmake-3.29/Modules/CMakeDetermineCompilerId.cmake:64 (__determine_compiler_id_test)"
+ - "/snap/clion/292/bin/cmake/linux/x64/share/cmake-3.29/Modules/CMakeDetermineCXXCompiler.cmake:126 (CMAKE_DETERMINE_COMPILER_ID)"
+ - "CMakeLists.txt:5 (project)"
+ message: |
+ Compiling the CXX compiler identification source file "CMakeCXXCompilerId.cpp" succeeded.
+ Compiler: /usr/bin/g++
+ Build flags:
+ Id flags:
+
+ The output was:
+ 0
+
+
+ Compilation of the CXX compiler identification source "CMakeCXXCompilerId.cpp" produced "a.out"
+
+ The CXX compiler identification is GNU, found in:
+ /home/shobhit/riscv-perf-model/cmake-build-debug/CMakeFiles/3.29.6/CompilerIdCXX/a.out
+
+ -
+ kind: "try_compile-v1"
+ backtrace:
+ - "/snap/clion/292/bin/cmake/linux/x64/share/cmake-3.29/Modules/CMakeDetermineCompilerABI.cmake:67 (try_compile)"
+ - "/snap/clion/292/bin/cmake/linux/x64/share/cmake-3.29/Modules/CMakeTestCXXCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)"
+ - "CMakeLists.txt:5 (project)"
+ checks:
+ - "Detecting CXX compiler ABI info"
+ directories:
+ source: "/home/shobhit/riscv-perf-model/cmake-build-debug/CMakeFiles/CMakeScratch/TryCompile-P5zgKL"
+ binary: "/home/shobhit/riscv-perf-model/cmake-build-debug/CMakeFiles/CMakeScratch/TryCompile-P5zgKL"
+ cmakeVariables:
+ CMAKE_CXX_FLAGS: ""
+ CMAKE_CXX_FLAGS_DEBUG: "-g"
+ CMAKE_CXX_SCAN_FOR_MODULES: "OFF"
+ CMAKE_EXE_LINKER_FLAGS: ""
+ buildResult:
+ variable: "CMAKE_CXX_ABI_COMPILED"
+ cached: true
+ stdout: |
+ Change Dir: '/home/shobhit/riscv-perf-model/cmake-build-debug/CMakeFiles/CMakeScratch/TryCompile-P5zgKL'
+
+ Run Build Command(s): /snap/clion/292/bin/cmake/linux/x64/bin/cmake -E env VERBOSE=1 make -f Makefile cmTC_fe8b8/fast
+ make -f CMakeFiles/cmTC_fe8b8.dir/build.make CMakeFiles/cmTC_fe8b8.dir/build
+ make[1]: Entering directory '/home/shobhit/riscv-perf-model/cmake-build-debug/CMakeFiles/CMakeScratch/TryCompile-P5zgKL'
+ Building CXX object CMakeFiles/cmTC_fe8b8.dir/CMakeCXXCompilerABI.cpp.o
+ /usr/bin/g++ -std=gnu++17 -fdiagnostics-color=always -v -o CMakeFiles/cmTC_fe8b8.dir/CMakeCXXCompilerABI.cpp.o -c /snap/clion/292/bin/cmake/linux/x64/share/cmake-3.29/Modules/CMakeCXXCompilerABI.cpp
+ Using built-in specs.
+ COLLECT_GCC=/usr/bin/g++
+ OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa
+ OFFLOAD_TARGET_DEFAULT=1
+ Target: x86_64-suse-linux
+ Configured with: ../configure CFLAGS=' -O2 -funwind-tables -fasynchronous-unwind-tables -fstack-clash-protection -Werror=return-type -g' CXXFLAGS=' -O2 -funwind-tables -fasynchronous-unwind-tables -fstack-clash-protection -Werror=return-type -g' XCFLAGS=' -O2 -funwind-tables -fasynchronous-unwind-tables -fstack-clash-protection -Werror=return-type -g' TCFLAGS=' -O2 -funwind-tables -fasynchronous-unwind-tables -fstack-clash-protection -Werror=return-type -g' GDCFLAGS=' -O2 -funwind-tables -fasynchronous-unwind-tables -fstack-clash-protection -g' --prefix=/usr --infodir=/usr/share/info --mandir=/usr/share/man --libdir=/usr/lib64 --libexecdir=/usr/lib64 --enable-languages=c,c++,objc,fortran,obj-c++,ada,go,d,jit,m2 --enable-offload-targets=nvptx-none,amdgcn-amdhsa, --enable-offload-defaulted --without-cuda-driver --enable-host-shared --enable-checking=release --disable-werror --with-gxx-include-dir=/usr/include/c++/13 --with-libstdcxx-zoneinfo=/usr/share/zoneinfo --enable-ssp --disable-libssp --disable-libvtv --enable-cet=auto --disable-libcc1 --enable-plugin --with-bugurl=https://bugs.opensuse.org/ --with-pkgversion='SUSE Linux' --with-slibdir=/lib64 --with-system-zlib --enable-libstdcxx-allocator=new --disable-libstdcxx-pch --enable-libphobos --enable-version-specific-runtime-libs --with-gcc-major-version-only --enable-linker-build-id --enable-linux-futex --enable-gnu-indirect-function --program-suffix=-13 --without-system-libunwind --enable-multilib --with-arch-32=x86-64 --with-tune=generic --with-build-config=bootstrap-lto-lean --enable-link-serialization --build=x86_64-suse-linux --host=x86_64-suse-linux
+ Thread model: posix
+ Supported LTO compression algorithms: zlib zstd
+ gcc version 13.3.0 (SUSE Linux)
+ COLLECT_GCC_OPTIONS='-fdiagnostics-color=always' '-std=gnu++17' '-v' '-o' 'CMakeFiles/cmTC_fe8b8.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_fe8b8.dir/'
+ /usr/lib64/gcc/x86_64-suse-linux/13/cc1plus -quiet -v -D_GNU_SOURCE /snap/clion/292/bin/cmake/linux/x64/share/cmake-3.29/Modules/CMakeCXXCompilerABI.cpp -quiet -dumpdir CMakeFiles/cmTC_fe8b8.dir/ -dumpbase CMakeCXXCompilerABI.cpp.cpp -dumpbase-ext .cpp -mtune=generic -march=x86-64 -std=gnu++17 -version -fdiagnostics-color=always -o /tmp/ccHtStKt.s
+ GNU C++17 (SUSE Linux) version 13.3.0 (x86_64-suse-linux)
+ compiled by GNU C version 13.3.0, GMP version 6.3.0, MPFR version 4.2.1, MPC version 1.3.1, isl version isl-0.26-GMP
+
+ GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
+ #include "..." search starts here:
+ #include <...> search starts here:
+ /usr/include/c++/13
+ /usr/include/c++/13/x86_64-suse-linux
+ /usr/include/c++/13/backward
+ /usr/lib64/gcc/x86_64-suse-linux/13/include
+ /usr/local/include
+ /usr/lib64/gcc/x86_64-suse-linux/13/include-fixed
+ /usr/lib64/gcc/x86_64-suse-linux/13/../../../../x86_64-suse-linux/include
+ /usr/include
+ End of search list.
+ Compiler executable checksum: 00000000000000000000000000000000
+ COLLECT_GCC_OPTIONS='-fdiagnostics-color=always' '-std=gnu++17' '-v' '-o' 'CMakeFiles/cmTC_fe8b8.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_fe8b8.dir/'
+ /usr/lib64/gcc/x86_64-suse-linux/13/../../../../x86_64-suse-linux/bin/as -v --64 -o CMakeFiles/cmTC_fe8b8.dir/CMakeCXXCompilerABI.cpp.o /tmp/ccHtStKt.s
+ GNU assembler version 2.42.0 (x86_64-suse-linux) using BFD version (GNU Binutils; openSUSE Tumbleweed) 2.42.0.20240130-4
+ COMPILER_PATH=/usr/lib64/gcc/x86_64-suse-linux/13/:/usr/lib64/gcc/x86_64-suse-linux/13/:/usr/lib64/gcc/x86_64-suse-linux/:/usr/lib64/gcc/x86_64-suse-linux/13/:/usr/lib64/gcc/x86_64-suse-linux/:/usr/lib64/gcc/x86_64-suse-linux/13/../../../../x86_64-suse-linux/bin/
+ LIBRARY_PATH=/usr/lib64/gcc/x86_64-suse-linux/13/:/usr/lib64/gcc/x86_64-suse-linux/13/../../../../lib64/:/lib/../lib64/:/usr/lib/../lib64/:/usr/lib64/gcc/x86_64-suse-linux/13/../../../../x86_64-suse-linux/lib/:/usr/lib64/gcc/x86_64-suse-linux/13/../../../:/lib/:/usr/lib/
+ COLLECT_GCC_OPTIONS='-fdiagnostics-color=always' '-std=gnu++17' '-v' '-o' 'CMakeFiles/cmTC_fe8b8.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_fe8b8.dir/CMakeCXXCompilerABI.cpp.'
+ Linking CXX executable cmTC_fe8b8
+ /snap/clion/292/bin/cmake/linux/x64/bin/cmake -E cmake_link_script CMakeFiles/cmTC_fe8b8.dir/link.txt --verbose=1
+ /usr/bin/g++ -v -Wl,-v CMakeFiles/cmTC_fe8b8.dir/CMakeCXXCompilerABI.cpp.o -o cmTC_fe8b8
+ Using built-in specs.
+ COLLECT_GCC=/usr/bin/g++
+ COLLECT_LTO_WRAPPER=/usr/lib64/gcc/x86_64-suse-linux/13/lto-wrapper
+ OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa
+ OFFLOAD_TARGET_DEFAULT=1
+ Target: x86_64-suse-linux
+ Configured with: ../configure CFLAGS=' -O2 -funwind-tables -fasynchronous-unwind-tables -fstack-clash-protection -Werror=return-type -g' CXXFLAGS=' -O2 -funwind-tables -fasynchronous-unwind-tables -fstack-clash-protection -Werror=return-type -g' XCFLAGS=' -O2 -funwind-tables -fasynchronous-unwind-tables -fstack-clash-protection -Werror=return-type -g' TCFLAGS=' -O2 -funwind-tables -fasynchronous-unwind-tables -fstack-clash-protection -Werror=return-type -g' GDCFLAGS=' -O2 -funwind-tables -fasynchronous-unwind-tables -fstack-clash-protection -g' --prefix=/usr --infodir=/usr/share/info --mandir=/usr/share/man --libdir=/usr/lib64 --libexecdir=/usr/lib64 --enable-languages=c,c++,objc,fortran,obj-c++,ada,go,d,jit,m2 --enable-offload-targets=nvptx-none,amdgcn-amdhsa, --enable-offload-defaulted --without-cuda-driver --enable-host-shared --enable-checking=release --disable-werror --with-gxx-include-dir=/usr/include/c++/13 --with-libstdcxx-zoneinfo=/usr/share/zoneinfo --enable-ssp --disable-libssp --disable-libvtv --enable-cet=auto --disable-libcc1 --enable-plugin --with-bugurl=https://bugs.opensuse.org/ --with-pkgversion='SUSE Linux' --with-slibdir=/lib64 --with-system-zlib --enable-libstdcxx-allocator=new --disable-libstdcxx-pch --enable-libphobos --enable-version-specific-runtime-libs --with-gcc-major-version-only --enable-linker-build-id --enable-linux-futex --enable-gnu-indirect-function --program-suffix=-13 --without-system-libunwind --enable-multilib --with-arch-32=x86-64 --with-tune=generic --with-build-config=bootstrap-lto-lean --enable-link-serialization --build=x86_64-suse-linux --host=x86_64-suse-linux
+ Thread model: posix
+ Supported LTO compression algorithms: zlib zstd
+ gcc version 13.3.0 (SUSE Linux)
+ COMPILER_PATH=/usr/lib64/gcc/x86_64-suse-linux/13/:/usr/lib64/gcc/x86_64-suse-linux/13/:/usr/lib64/gcc/x86_64-suse-linux/:/usr/lib64/gcc/x86_64-suse-linux/13/:/usr/lib64/gcc/x86_64-suse-linux/:/usr/lib64/gcc/x86_64-suse-linux/13/../../../../x86_64-suse-linux/bin/
+ LIBRARY_PATH=/usr/lib64/gcc/x86_64-suse-linux/13/:/usr/lib64/gcc/x86_64-suse-linux/13/../../../../lib64/:/lib/../lib64/:/usr/lib/../lib64/:/usr/lib64/gcc/x86_64-suse-linux/13/../../../../x86_64-suse-linux/lib/:/usr/lib64/gcc/x86_64-suse-linux/13/../../../:/lib/:/usr/lib/
+ COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_fe8b8' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_fe8b8.'
+ /usr/lib64/gcc/x86_64-suse-linux/13/collect2 -plugin /usr/lib64/gcc/x86_64-suse-linux/13/liblto_plugin.so -plugin-opt=/usr/lib64/gcc/x86_64-suse-linux/13/lto-wrapper -plugin-opt=-fresolution=/tmp/ccDUj6yM.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --eh-frame-hdr -m elf_x86_64 -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o cmTC_fe8b8 /usr/lib64/gcc/x86_64-suse-linux/13/../../../../lib64/crt1.o /usr/lib64/gcc/x86_64-suse-linux/13/../../../../lib64/crti.o /usr/lib64/gcc/x86_64-suse-linux/13/crtbegin.o -L/usr/lib64/gcc/x86_64-suse-linux/13 -L/usr/lib64/gcc/x86_64-suse-linux/13/../../../../lib64 -L/lib/../lib64 -L/usr/lib/../lib64 -L/usr/lib64/gcc/x86_64-suse-linux/13/../../../../x86_64-suse-linux/lib -L/usr/lib64/gcc/x86_64-suse-linux/13/../../.. -v CMakeFiles/cmTC_fe8b8.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib64/gcc/x86_64-suse-linux/13/crtend.o /usr/lib64/gcc/x86_64-suse-linux/13/../../../../lib64/crtn.o
+ collect2 version 13.3.0
+ /usr/lib64/gcc/x86_64-suse-linux/13/../../../../x86_64-suse-linux/bin/ld -plugin /usr/lib64/gcc/x86_64-suse-linux/13/liblto_plugin.so -plugin-opt=/usr/lib64/gcc/x86_64-suse-linux/13/lto-wrapper -plugin-opt=-fresolution=/tmp/ccDUj6yM.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --eh-frame-hdr -m elf_x86_64 -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o cmTC_fe8b8 /usr/lib64/gcc/x86_64-suse-linux/13/../../../../lib64/crt1.o /usr/lib64/gcc/x86_64-suse-linux/13/../../../../lib64/crti.o /usr/lib64/gcc/x86_64-suse-linux/13/crtbegin.o -L/usr/lib64/gcc/x86_64-suse-linux/13 -L/usr/lib64/gcc/x86_64-suse-linux/13/../../../../lib64 -L/lib/../lib64 -L/usr/lib/../lib64 -L/usr/lib64/gcc/x86_64-suse-linux/13/../../../../x86_64-suse-linux/lib -L/usr/lib64/gcc/x86_64-suse-linux/13/../../.. -v CMakeFiles/cmTC_fe8b8.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib64/gcc/x86_64-suse-linux/13/crtend.o /usr/lib64/gcc/x86_64-suse-linux/13/../../../../lib64/crtn.o
+ GNU ld (GNU Binutils; openSUSE Tumbleweed) 2.42.0.20240130-4
+ COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_fe8b8' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_fe8b8.'
+ make[1]: Leaving directory '/home/shobhit/riscv-perf-model/cmake-build-debug/CMakeFiles/CMakeScratch/TryCompile-P5zgKL'
+
+ exitCode: 0
+ -
+ kind: "message-v1"
+ backtrace:
+ - "/snap/clion/292/bin/cmake/linux/x64/share/cmake-3.29/Modules/CMakeDetermineCompilerABI.cmake:137 (message)"
+ - "/snap/clion/292/bin/cmake/linux/x64/share/cmake-3.29/Modules/CMakeTestCXXCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)"
+ - "CMakeLists.txt:5 (project)"
+ message: |
+ Parsed CXX implicit include dir info: rv=done
+ found start of include info
+ found start of implicit include info
+ add: [/usr/include/c++/13]
+ add: [/usr/include/c++/13/x86_64-suse-linux]
+ add: [/usr/include/c++/13/backward]
+ add: [/usr/lib64/gcc/x86_64-suse-linux/13/include]
+ add: [/usr/local/include]
+ add: [/usr/lib64/gcc/x86_64-suse-linux/13/include-fixed]
+ add: [/usr/lib64/gcc/x86_64-suse-linux/13/../../../../x86_64-suse-linux/include]
+ add: [/usr/include]
+ end of search list found
+ collapse include dir [/usr/include/c++/13] ==> [/usr/include/c++/13]
+ collapse include dir [/usr/include/c++/13/x86_64-suse-linux] ==> [/usr/include/c++/13/x86_64-suse-linux]
+ collapse include dir [/usr/include/c++/13/backward] ==> [/usr/include/c++/13/backward]
+ collapse include dir [/usr/lib64/gcc/x86_64-suse-linux/13/include] ==> [/usr/lib64/gcc/x86_64-suse-linux/13/include]
+ collapse include dir [/usr/local/include] ==> [/usr/local/include]
+ collapse include dir [/usr/lib64/gcc/x86_64-suse-linux/13/include-fixed] ==> [/usr/lib64/gcc/x86_64-suse-linux/13/include-fixed]
+ collapse include dir [/usr/lib64/gcc/x86_64-suse-linux/13/../../../../x86_64-suse-linux/include] ==> [/usr/x86_64-suse-linux/include]
+ collapse include dir [/usr/include] ==> [/usr/include]
+ implicit include dirs: [/usr/include/c++/13;/usr/include/c++/13/x86_64-suse-linux;/usr/include/c++/13/backward;/usr/lib64/gcc/x86_64-suse-linux/13/include;/usr/local/include;/usr/lib64/gcc/x86_64-suse-linux/13/include-fixed;/usr/x86_64-suse-linux/include;/usr/include]
+
+
+ -
+ kind: "message-v1"
+ backtrace:
+ - "/snap/clion/292/bin/cmake/linux/x64/share/cmake-3.29/Modules/CMakeDetermineCompilerABI.cmake:173 (message)"
+ - "/snap/clion/292/bin/cmake/linux/x64/share/cmake-3.29/Modules/CMakeTestCXXCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)"
+ - "CMakeLists.txt:5 (project)"
+ message: |
+ Parsed CXX implicit link information:
+ link line regex: [^( *|.*[/\\])(ld[0-9]*(\\.[a-z]+)?|CMAKE_LINK_STARTFILE-NOTFOUND|([^/\\]+-)?ld|collect2)[^/\\]*( |$)]
+ linker tool regex: [^[ ]*(->|")?[ ]*(([^"]*[/\\])?(ld[0-9]*(\\.[a-z]+)?))("|,| |$)]
+ ignore line: [Change Dir: '/home/shobhit/riscv-perf-model/cmake-build-debug/CMakeFiles/CMakeScratch/TryCompile-P5zgKL']
+ ignore line: []
+ ignore line: [Run Build Command(s): /snap/clion/292/bin/cmake/linux/x64/bin/cmake -E env VERBOSE=1 make -f Makefile cmTC_fe8b8/fast]
+ ignore line: [make -f CMakeFiles/cmTC_fe8b8.dir/build.make CMakeFiles/cmTC_fe8b8.dir/build]
+ ignore line: [make[1]: Entering directory '/home/shobhit/riscv-perf-model/cmake-build-debug/CMakeFiles/CMakeScratch/TryCompile-P5zgKL']
+ ignore line: [Building CXX object CMakeFiles/cmTC_fe8b8.dir/CMakeCXXCompilerABI.cpp.o]
+ ignore line: [/usr/bin/g++ -std=gnu++17 -fdiagnostics-color=always -v -o CMakeFiles/cmTC_fe8b8.dir/CMakeCXXCompilerABI.cpp.o -c /snap/clion/292/bin/cmake/linux/x64/share/cmake-3.29/Modules/CMakeCXXCompilerABI.cpp]
+ ignore line: [Using built-in specs.]
+ ignore line: [COLLECT_GCC=/usr/bin/g++]
+ ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa]
+ ignore line: [OFFLOAD_TARGET_DEFAULT=1]
+ ignore line: [Target: x86_64-suse-linux]
+ ignore line: [Configured with: ../configure CFLAGS=' -O2 -funwind-tables -fasynchronous-unwind-tables -fstack-clash-protection -Werror=return-type -g' CXXFLAGS=' -O2 -funwind-tables -fasynchronous-unwind-tables -fstack-clash-protection -Werror=return-type -g' XCFLAGS=' -O2 -funwind-tables -fasynchronous-unwind-tables -fstack-clash-protection -Werror=return-type -g' TCFLAGS=' -O2 -funwind-tables -fasynchronous-unwind-tables -fstack-clash-protection -Werror=return-type -g' GDCFLAGS=' -O2 -funwind-tables -fasynchronous-unwind-tables -fstack-clash-protection -g' --prefix=/usr --infodir=/usr/share/info --mandir=/usr/share/man --libdir=/usr/lib64 --libexecdir=/usr/lib64 --enable-languages=c c++ objc fortran obj-c++ ada go d jit m2 --enable-offload-targets=nvptx-none amdgcn-amdhsa --enable-offload-defaulted --without-cuda-driver --enable-host-shared --enable-checking=release --disable-werror --with-gxx-include-dir=/usr/include/c++/13 --with-libstdcxx-zoneinfo=/usr/share/zoneinfo --enable-ssp --disable-libssp --disable-libvtv --enable-cet=auto --disable-libcc1 --enable-plugin --with-bugurl=https://bugs.opensuse.org/ --with-pkgversion='SUSE Linux' --with-slibdir=/lib64 --with-system-zlib --enable-libstdcxx-allocator=new --disable-libstdcxx-pch --enable-libphobos --enable-version-specific-runtime-libs --with-gcc-major-version-only --enable-linker-build-id --enable-linux-futex --enable-gnu-indirect-function --program-suffix=-13 --without-system-libunwind --enable-multilib --with-arch-32=x86-64 --with-tune=generic --with-build-config=bootstrap-lto-lean --enable-link-serialization --build=x86_64-suse-linux --host=x86_64-suse-linux]
+ ignore line: [Thread model: posix]
+ ignore line: [Supported LTO compression algorithms: zlib zstd]
+ ignore line: [gcc version 13.3.0 (SUSE Linux) ]
+ ignore line: [COLLECT_GCC_OPTIONS='-fdiagnostics-color=always' '-std=gnu++17' '-v' '-o' 'CMakeFiles/cmTC_fe8b8.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_fe8b8.dir/']
+ ignore line: [ /usr/lib64/gcc/x86_64-suse-linux/13/cc1plus -quiet -v -D_GNU_SOURCE /snap/clion/292/bin/cmake/linux/x64/share/cmake-3.29/Modules/CMakeCXXCompilerABI.cpp -quiet -dumpdir CMakeFiles/cmTC_fe8b8.dir/ -dumpbase CMakeCXXCompilerABI.cpp.cpp -dumpbase-ext .cpp -mtune=generic -march=x86-64 -std=gnu++17 -version -fdiagnostics-color=always -o /tmp/ccHtStKt.s]
+ ignore line: [GNU C++17 (SUSE Linux) version 13.3.0 (x86_64-suse-linux)]
+ ignore line: [ compiled by GNU C version 13.3.0 GMP version 6.3.0 MPFR version 4.2.1 MPC version 1.3.1 isl version isl-0.26-GMP]
+ ignore line: []
+ ignore line: [GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072]
+ ignore line: [#include "..." search starts here:]
+ ignore line: [#include <...> search starts here:]
+ ignore line: [ /usr/include/c++/13]
+ ignore line: [ /usr/include/c++/13/x86_64-suse-linux]
+ ignore line: [ /usr/include/c++/13/backward]
+ ignore line: [ /usr/lib64/gcc/x86_64-suse-linux/13/include]
+ ignore line: [ /usr/local/include]
+ ignore line: [ /usr/lib64/gcc/x86_64-suse-linux/13/include-fixed]
+ ignore line: [ /usr/lib64/gcc/x86_64-suse-linux/13/../../../../x86_64-suse-linux/include]
+ ignore line: [ /usr/include]
+ ignore line: [End of search list.]
+ ignore line: [Compiler executable checksum: 00000000000000000000000000000000]
+ ignore line: [COLLECT_GCC_OPTIONS='-fdiagnostics-color=always' '-std=gnu++17' '-v' '-o' 'CMakeFiles/cmTC_fe8b8.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_fe8b8.dir/']
+ ignore line: [ /usr/lib64/gcc/x86_64-suse-linux/13/../../../../x86_64-suse-linux/bin/as -v --64 -o CMakeFiles/cmTC_fe8b8.dir/CMakeCXXCompilerABI.cpp.o /tmp/ccHtStKt.s]
+ ignore line: [GNU assembler version 2.42.0 (x86_64-suse-linux) using BFD version (GNU Binutils]
+ ignore line: [ openSUSE Tumbleweed) 2.42.0.20240130-4]
+ ignore line: [COMPILER_PATH=/usr/lib64/gcc/x86_64-suse-linux/13/:/usr/lib64/gcc/x86_64-suse-linux/13/:/usr/lib64/gcc/x86_64-suse-linux/:/usr/lib64/gcc/x86_64-suse-linux/13/:/usr/lib64/gcc/x86_64-suse-linux/:/usr/lib64/gcc/x86_64-suse-linux/13/../../../../x86_64-suse-linux/bin/]
+ ignore line: [LIBRARY_PATH=/usr/lib64/gcc/x86_64-suse-linux/13/:/usr/lib64/gcc/x86_64-suse-linux/13/../../../../lib64/:/lib/../lib64/:/usr/lib/../lib64/:/usr/lib64/gcc/x86_64-suse-linux/13/../../../../x86_64-suse-linux/lib/:/usr/lib64/gcc/x86_64-suse-linux/13/../../../:/lib/:/usr/lib/]
+ ignore line: [COLLECT_GCC_OPTIONS='-fdiagnostics-color=always' '-std=gnu++17' '-v' '-o' 'CMakeFiles/cmTC_fe8b8.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_fe8b8.dir/CMakeCXXCompilerABI.cpp.']
+ ignore line: [Linking CXX executable cmTC_fe8b8]
+ ignore line: [/snap/clion/292/bin/cmake/linux/x64/bin/cmake -E cmake_link_script CMakeFiles/cmTC_fe8b8.dir/link.txt --verbose=1]
+ ignore line: [/usr/bin/g++ -v -Wl -v CMakeFiles/cmTC_fe8b8.dir/CMakeCXXCompilerABI.cpp.o -o cmTC_fe8b8]
+ ignore line: [Using built-in specs.]
+ ignore line: [COLLECT_GCC=/usr/bin/g++]
+ ignore line: [COLLECT_LTO_WRAPPER=/usr/lib64/gcc/x86_64-suse-linux/13/lto-wrapper]
+ ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa]
+ ignore line: [OFFLOAD_TARGET_DEFAULT=1]
+ ignore line: [Target: x86_64-suse-linux]
+ ignore line: [Configured with: ../configure CFLAGS=' -O2 -funwind-tables -fasynchronous-unwind-tables -fstack-clash-protection -Werror=return-type -g' CXXFLAGS=' -O2 -funwind-tables -fasynchronous-unwind-tables -fstack-clash-protection -Werror=return-type -g' XCFLAGS=' -O2 -funwind-tables -fasynchronous-unwind-tables -fstack-clash-protection -Werror=return-type -g' TCFLAGS=' -O2 -funwind-tables -fasynchronous-unwind-tables -fstack-clash-protection -Werror=return-type -g' GDCFLAGS=' -O2 -funwind-tables -fasynchronous-unwind-tables -fstack-clash-protection -g' --prefix=/usr --infodir=/usr/share/info --mandir=/usr/share/man --libdir=/usr/lib64 --libexecdir=/usr/lib64 --enable-languages=c c++ objc fortran obj-c++ ada go d jit m2 --enable-offload-targets=nvptx-none amdgcn-amdhsa --enable-offload-defaulted --without-cuda-driver --enable-host-shared --enable-checking=release --disable-werror --with-gxx-include-dir=/usr/include/c++/13 --with-libstdcxx-zoneinfo=/usr/share/zoneinfo --enable-ssp --disable-libssp --disable-libvtv --enable-cet=auto --disable-libcc1 --enable-plugin --with-bugurl=https://bugs.opensuse.org/ --with-pkgversion='SUSE Linux' --with-slibdir=/lib64 --with-system-zlib --enable-libstdcxx-allocator=new --disable-libstdcxx-pch --enable-libphobos --enable-version-specific-runtime-libs --with-gcc-major-version-only --enable-linker-build-id --enable-linux-futex --enable-gnu-indirect-function --program-suffix=-13 --without-system-libunwind --enable-multilib --with-arch-32=x86-64 --with-tune=generic --with-build-config=bootstrap-lto-lean --enable-link-serialization --build=x86_64-suse-linux --host=x86_64-suse-linux]
+ ignore line: [Thread model: posix]
+ ignore line: [Supported LTO compression algorithms: zlib zstd]
+ ignore line: [gcc version 13.3.0 (SUSE Linux) ]
+ ignore line: [COMPILER_PATH=/usr/lib64/gcc/x86_64-suse-linux/13/:/usr/lib64/gcc/x86_64-suse-linux/13/:/usr/lib64/gcc/x86_64-suse-linux/:/usr/lib64/gcc/x86_64-suse-linux/13/:/usr/lib64/gcc/x86_64-suse-linux/:/usr/lib64/gcc/x86_64-suse-linux/13/../../../../x86_64-suse-linux/bin/]
+ ignore line: [LIBRARY_PATH=/usr/lib64/gcc/x86_64-suse-linux/13/:/usr/lib64/gcc/x86_64-suse-linux/13/../../../../lib64/:/lib/../lib64/:/usr/lib/../lib64/:/usr/lib64/gcc/x86_64-suse-linux/13/../../../../x86_64-suse-linux/lib/:/usr/lib64/gcc/x86_64-suse-linux/13/../../../:/lib/:/usr/lib/]
+ ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_fe8b8' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_fe8b8.']
+ link line: [ /usr/lib64/gcc/x86_64-suse-linux/13/collect2 -plugin /usr/lib64/gcc/x86_64-suse-linux/13/liblto_plugin.so -plugin-opt=/usr/lib64/gcc/x86_64-suse-linux/13/lto-wrapper -plugin-opt=-fresolution=/tmp/ccDUj6yM.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --eh-frame-hdr -m elf_x86_64 -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o cmTC_fe8b8 /usr/lib64/gcc/x86_64-suse-linux/13/../../../../lib64/crt1.o /usr/lib64/gcc/x86_64-suse-linux/13/../../../../lib64/crti.o /usr/lib64/gcc/x86_64-suse-linux/13/crtbegin.o -L/usr/lib64/gcc/x86_64-suse-linux/13 -L/usr/lib64/gcc/x86_64-suse-linux/13/../../../../lib64 -L/lib/../lib64 -L/usr/lib/../lib64 -L/usr/lib64/gcc/x86_64-suse-linux/13/../../../../x86_64-suse-linux/lib -L/usr/lib64/gcc/x86_64-suse-linux/13/../../.. -v CMakeFiles/cmTC_fe8b8.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib64/gcc/x86_64-suse-linux/13/crtend.o /usr/lib64/gcc/x86_64-suse-linux/13/../../../../lib64/crtn.o]
+ arg [/usr/lib64/gcc/x86_64-suse-linux/13/collect2] ==> ignore
+ arg [-plugin] ==> ignore
+ arg [/usr/lib64/gcc/x86_64-suse-linux/13/liblto_plugin.so] ==> ignore
+ arg [-plugin-opt=/usr/lib64/gcc/x86_64-suse-linux/13/lto-wrapper] ==> ignore
+ arg [-plugin-opt=-fresolution=/tmp/ccDUj6yM.res] ==> ignore
+ arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore
+ arg [-plugin-opt=-pass-through=-lgcc] ==> ignore
+ arg [-plugin-opt=-pass-through=-lc] ==> ignore
+ arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore
+ arg [-plugin-opt=-pass-through=-lgcc] ==> ignore
+ arg [--build-id] ==> ignore
+ arg [--eh-frame-hdr] ==> ignore
+ arg [-m] ==> ignore
+ arg [elf_x86_64] ==> ignore
+ arg [-dynamic-linker] ==> ignore
+ arg [/lib64/ld-linux-x86-64.so.2] ==> ignore
+ arg [-o] ==> ignore
+ arg [cmTC_fe8b8] ==> ignore
+ arg [/usr/lib64/gcc/x86_64-suse-linux/13/../../../../lib64/crt1.o] ==> obj [/usr/lib64/gcc/x86_64-suse-linux/13/../../../../lib64/crt1.o]
+ arg [/usr/lib64/gcc/x86_64-suse-linux/13/../../../../lib64/crti.o] ==> obj [/usr/lib64/gcc/x86_64-suse-linux/13/../../../../lib64/crti.o]
+ arg [/usr/lib64/gcc/x86_64-suse-linux/13/crtbegin.o] ==> obj [/usr/lib64/gcc/x86_64-suse-linux/13/crtbegin.o]
+ arg [-L/usr/lib64/gcc/x86_64-suse-linux/13] ==> dir [/usr/lib64/gcc/x86_64-suse-linux/13]
+ arg [-L/usr/lib64/gcc/x86_64-suse-linux/13/../../../../lib64] ==> dir [/usr/lib64/gcc/x86_64-suse-linux/13/../../../../lib64]
+ arg [-L/lib/../lib64] ==> dir [/lib/../lib64]
+ arg [-L/usr/lib/../lib64] ==> dir [/usr/lib/../lib64]
+ arg [-L/usr/lib64/gcc/x86_64-suse-linux/13/../../../../x86_64-suse-linux/lib] ==> dir [/usr/lib64/gcc/x86_64-suse-linux/13/../../../../x86_64-suse-linux/lib]
+ arg [-L/usr/lib64/gcc/x86_64-suse-linux/13/../../..] ==> dir [/usr/lib64/gcc/x86_64-suse-linux/13/../../..]
+ arg [-v] ==> ignore
+ arg [CMakeFiles/cmTC_fe8b8.dir/CMakeCXXCompilerABI.cpp.o] ==> ignore
+ arg [-lstdc++] ==> lib [stdc++]
+ arg [-lm] ==> lib [m]
+ arg [-lgcc_s] ==> lib [gcc_s]
+ arg [-lgcc] ==> lib [gcc]
+ arg [-lc] ==> lib [c]
+ arg [-lgcc_s] ==> lib [gcc_s]
+ arg [-lgcc] ==> lib [gcc]
+ arg [/usr/lib64/gcc/x86_64-suse-linux/13/crtend.o] ==> obj [/usr/lib64/gcc/x86_64-suse-linux/13/crtend.o]
+ arg [/usr/lib64/gcc/x86_64-suse-linux/13/../../../../lib64/crtn.o] ==> obj [/usr/lib64/gcc/x86_64-suse-linux/13/../../../../lib64/crtn.o]
+ ignore line: [collect2 version 13.3.0]
+ ignore line: [/usr/lib64/gcc/x86_64-suse-linux/13/../../../../x86_64-suse-linux/bin/ld -plugin /usr/lib64/gcc/x86_64-suse-linux/13/liblto_plugin.so -plugin-opt=/usr/lib64/gcc/x86_64-suse-linux/13/lto-wrapper -plugin-opt=-fresolution=/tmp/ccDUj6yM.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --eh-frame-hdr -m elf_x86_64 -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o cmTC_fe8b8 /usr/lib64/gcc/x86_64-suse-linux/13/../../../../lib64/crt1.o /usr/lib64/gcc/x86_64-suse-linux/13/../../../../lib64/crti.o /usr/lib64/gcc/x86_64-suse-linux/13/crtbegin.o -L/usr/lib64/gcc/x86_64-suse-linux/13 -L/usr/lib64/gcc/x86_64-suse-linux/13/../../../../lib64 -L/lib/../lib64 -L/usr/lib/../lib64 -L/usr/lib64/gcc/x86_64-suse-linux/13/../../../../x86_64-suse-linux/lib -L/usr/lib64/gcc/x86_64-suse-linux/13/../../.. -v CMakeFiles/cmTC_fe8b8.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib64/gcc/x86_64-suse-linux/13/crtend.o /usr/lib64/gcc/x86_64-suse-linux/13/../../../../lib64/crtn.o]
+ linker tool for 'CXX': /usr/lib64/gcc/x86_64-suse-linux/13/../../../../x86_64-suse-linux/bin/ld
+ collapse obj [/usr/lib64/gcc/x86_64-suse-linux/13/../../../../lib64/crt1.o] ==> [/usr/lib64/crt1.o]
+ collapse obj [/usr/lib64/gcc/x86_64-suse-linux/13/../../../../lib64/crti.o] ==> [/usr/lib64/crti.o]
+ collapse obj [/usr/lib64/gcc/x86_64-suse-linux/13/../../../../lib64/crtn.o] ==> [/usr/lib64/crtn.o]
+ collapse library dir [/usr/lib64/gcc/x86_64-suse-linux/13] ==> [/usr/lib64/gcc/x86_64-suse-linux/13]
+ collapse library dir [/usr/lib64/gcc/x86_64-suse-linux/13/../../../../lib64] ==> [/usr/lib64]
+ collapse library dir [/lib/../lib64] ==> [/lib64]
+ collapse library dir [/usr/lib/../lib64] ==> [/usr/lib64]
+ collapse library dir [/usr/lib64/gcc/x86_64-suse-linux/13/../../../../x86_64-suse-linux/lib] ==> [/usr/x86_64-suse-linux/lib]
+ collapse library dir [/usr/lib64/gcc/x86_64-suse-linux/13/../../..] ==> [/usr/lib64]
+ implicit libs: [stdc++;m;gcc_s;gcc;c;gcc_s;gcc]
+ implicit objs: [/usr/lib64/crt1.o;/usr/lib64/crti.o;/usr/lib64/gcc/x86_64-suse-linux/13/crtbegin.o;/usr/lib64/gcc/x86_64-suse-linux/13/crtend.o;/usr/lib64/crtn.o]
+ implicit dirs: [/usr/lib64/gcc/x86_64-suse-linux/13;/usr/lib64;/lib64;/usr/x86_64-suse-linux/lib]
+ implicit fwks: []
+
+
+ -
+ kind: "message-v1"
+ backtrace:
+ - "/snap/clion/292/bin/cmake/linux/x64/share/cmake-3.29/Modules/Internal/CMakeDetermineLinkerId.cmake:40 (message)"
+ - "/snap/clion/292/bin/cmake/linux/x64/share/cmake-3.29/Modules/CMakeDetermineCompilerABI.cmake:210 (cmake_determine_linker_id)"
+ - "/snap/clion/292/bin/cmake/linux/x64/share/cmake-3.29/Modules/CMakeTestCXXCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)"
+ - "CMakeLists.txt:5 (project)"
+ message: |
+ Running the CXX compiler's linker: "/usr/lib64/gcc/x86_64-suse-linux/13/../../../../x86_64-suse-linux/bin/ld" "-v"
+ GNU ld (GNU Binutils; openSUSE Tumbleweed) 2.42.0.20240130-4
+...
diff --git a/cmake-build-debug/CMakeFiles/clion-Debug-log.txt b/cmake-build-debug/CMakeFiles/clion-Debug-log.txt
new file mode 100644
index 00000000..c6032f94
--- /dev/null
+++ b/cmake-build-debug/CMakeFiles/clion-Debug-log.txt
@@ -0,0 +1,20 @@
+/snap/clion/296/bin/cmake/linux/x64/bin/cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_MAKE_PROGRAM=make -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ -G "Unix Makefiles" -S /home/shobhit/riscv-perf-model -B /home/shobhit/riscv-perf-model/cmake-build-debug
+-- Looking for SPARTA in the conda environment: '/home/shobhit/miniconda3'
+CMake Error at CMakeLists.txt:24 (find_package):
+ By not providing "FindSparta.cmake" in CMAKE_MODULE_PATH this project has
+ asked CMake to find a package configuration file provided by "Sparta", but
+ CMake did not find one.
+
+ Could not find a package configuration file provided by "Sparta" with any
+ of the following names:
+
+ SpartaConfig.cmake
+ sparta-config.cmake
+
+ Add the installation prefix of "Sparta" to CMAKE_PREFIX_PATH or set
+ "Sparta_DIR" to a directory containing one of the above files. If "Sparta"
+ provides a separate development package or SDK, be sure it has been
+ installed.
+
+
+-- Configuring incomplete, errors occurred!
diff --git a/cmake-build-debug/CMakeFiles/clion-environment.txt b/cmake-build-debug/CMakeFiles/clion-environment.txt
new file mode 100644
index 00000000..cd47557a
Binary files /dev/null and b/cmake-build-debug/CMakeFiles/clion-environment.txt differ
diff --git a/cmake-build-debug/CMakeFiles/cmake.check_cache b/cmake-build-debug/CMakeFiles/cmake.check_cache
new file mode 100644
index 00000000..3dccd731
--- /dev/null
+++ b/cmake-build-debug/CMakeFiles/cmake.check_cache
@@ -0,0 +1 @@
+# This file is generated by cmake for dependency checking of the CMakeCache.txt file
diff --git a/conda/environment.yml b/conda/environment.yml
index e7e632a0..c4d77360 100644
--- a/conda/environment.yml
+++ b/conda/environment.yml
@@ -6,6 +6,7 @@ dependencies:
- _openmp_mutex>=4.5=2_gnu
- binutils_impl_linux-64>=2.39=he00db2b_1
- binutils_linux-64>=2.39=h5fc0e48_11
+ - bison>=3.8
- boost>=1.76.0=py310h7c3ba0c_1
- boost-cpp>=1.76.0=h312852a_1
- bzip2>=1.0.8=h7f98852_4
@@ -19,6 +20,7 @@ dependencies:
- curl>=7.87.0=h6312ad2_0
- doxygen>=1.8.20=had0d8f1_0
- expat>=2.5.0=h27087fc_0
+ - flex>=2.6
- gcc>=10.4.0=hb92f740_13
- gcc_impl_linux-64>=10.4.0=h5231bdf_19
- gcc_linux-64>=10.4.0=h9215b83_11
diff --git a/core/BranchPredIF.hpp b/core/BranchPredIF.hpp
new file mode 100644
index 00000000..775521a1
--- /dev/null
+++ b/core/BranchPredIF.hpp
@@ -0,0 +1,45 @@
+// -*- C++ -*-
+
+//!
+//! \file BranchPred.hpp
+//! \brief Definition of Branch Prediction API
+//!
+
+/*
+ * This file defines the Branch Prediction API.
+ * The goal is to define an API that is generic and yet flexible enough to support various
+ * branch prediction microarchitecture.
+ * To the end, we envision a generic branch predictor as a black box with following inputs
+ * and outputs:
+ * * A generic Prediction output
+ * * A generic Prediction input
+ * * A generic Update input
+ *
+ * The generic branch predictor may have two operations:
+ * * getPrediction: produces Prediction output based on the Prediction input.
+ * * updatePredictor: updates Predictor with Update input.
+ *
+ * It is intended that an implementation of branch predictor must also specify
+ * implementations of Prediction output, Prediction input and Update input, along with
+ * implementations of getPrediction and updatePredictor operations.
+ * */
+#pragma once
+
+namespace olympia
+{
+namespace BranchPredictor
+{
+
+ template
+ class BranchPredictorIF
+ {
+ public:
+ // TODO: create constexpr for bytes per compressed and uncompressed inst
+ static constexpr uint8_t bytes_per_inst = 4;
+ virtual ~BranchPredictorIF() { };
+ virtual PredictionT getPrediction(const InputT &) = 0;
+ virtual void updatePredictor(const UpdateT &) = 0;
+ };
+
+} // namespace BranchPredictor
+} // namespace olympia
diff --git a/core/CMakeLists.txt b/core/CMakeLists.txt
index fdf462b1..47657c75 100644
--- a/core/CMakeLists.txt
+++ b/core/CMakeLists.txt
@@ -1,9 +1,12 @@
project (core)
add_library(core
+ FusionDecode.cpp
Core.cpp
+ SimpleBranchPred.cpp
ICache.cpp
Fetch.cpp
Decode.cpp
+ VectorUopGenerator.cpp
Rename.cpp
Dispatch.cpp
Dispatcher.cpp
diff --git a/core/CPUFactories.hpp b/core/CPUFactories.hpp
index 28f90dae..2947ba89 100644
--- a/core/CPUFactories.hpp
+++ b/core/CPUFactories.hpp
@@ -8,6 +8,7 @@
#include "ICache.hpp"
#include "Fetch.hpp"
#include "Decode.hpp"
+#include "VectorUopGenerator.hpp"
#include "Rename.hpp"
#include "Dispatch.hpp"
#include "Execute.hpp"
@@ -52,6 +53,10 @@ namespace olympia{
sparta::ResourceFactory decode_rf;
+ //! \brief Resource Factory to build a VectorUopGenerator
+ sparta::ResourceFactory vec_uop_gen_rf;
+
//! \brief Resource Factory to build a Rename Unit
RenameFactory rename_rf;
diff --git a/core/CPUTopology.cpp b/core/CPUTopology.cpp
index 2f3f3b79..c2fc310a 100644
--- a/core/CPUTopology.cpp
+++ b/core/CPUTopology.cpp
@@ -51,6 +51,14 @@ olympia::CoreTopologySimple::CoreTopologySimple(){
sparta::TreeNode::GROUP_IDX_NONE,
&factories->decode_rf
},
+ {
+ "vec_uop_gen",
+ "cpu.core*.decode",
+ "Vector Uop Generator",
+ sparta::TreeNode::GROUP_NAME_NONE,
+ sparta::TreeNode::GROUP_IDX_NONE,
+ &factories->vec_uop_gen_rf
+ },
{
"rename",
"cpu.core*",
@@ -413,8 +421,15 @@ void olympia::CoreTopologySimple::bindTree(sparta::RootTreeNode* root_node)
pipe_target_end = stoi(iq[1]);
}
pipe_target_end++;
+ const std::string vset_in_decode =
+ core_node + ".decode." + "ports.in_vset_inst";
for (int pipe_idx = pipe_target_start; pipe_idx < pipe_target_end; ++pipe_idx)
{
+ // check to ensure no duplicate pipe definitions
+ std::set unique_pipe_def_check(pipelines[pipe_idx].begin(), pipelines[pipe_idx].end());
+ sparta_assert(unique_pipe_def_check.size() == pipelines[pipe_idx].size(),
+ "Duplicate pipe definitions, double check yaml file")
+
std::string unit_name = "exe" + std::to_string(pipe_idx);
if (exe_pipe_rename.size() > 0)
{
@@ -427,6 +442,16 @@ void olympia::CoreTopologySimple::bindTree(sparta::RootTreeNode* root_node)
const std::string exe_pipe_out =
core_node + ".execute." + unit_name + ".ports.out_execute_pipe";
bind_ports(exe_pipe_in, exe_pipe_out);
+
+ for(uint32_t i = 0; i < pipelines[pipe_idx].size(); ++i){
+ if(pipelines[pipe_idx][i] == "vset"){
+ // only bind execute pipe -> decode port for an issue queue if it has a vset pipe
+ const std::string exe_vset_out =
+ core_node + ".execute." + unit_name + ".ports.out_vset";
+ bind_ports(vset_in_decode, exe_vset_out);
+ break; // break after we find a vset in pipeline def
+ }
+ }
}
const std::string exe_flush_in =
diff --git a/core/CacheFuncModel.hpp b/core/CacheFuncModel.hpp
index 61f8e2e8..749fa1b1 100644
--- a/core/CacheFuncModel.hpp
+++ b/core/CacheFuncModel.hpp
@@ -59,7 +59,9 @@ namespace olympia
bool isValid() const { return valid_; }
// Required by SimpleCache2
- void setModified(bool m) { (void) m; }
+ void setModified(bool m) { modified_ = m; }
+
+ bool isModified() const { return modified_; }
// Required by SimpleCache2
bool read(uint64_t offset, uint32_t size, uint32_t *buf) const
@@ -84,6 +86,7 @@ namespace olympia
private:
uint64_t line_size_ = 0;
bool valid_ = false;
+ bool modified_ = false;
}; // class SimpleCacheLine
diff --git a/core/CoreTypes.hpp b/core/CoreTypes.hpp
index facd808f..4e37db57 100644
--- a/core/CoreTypes.hpp
+++ b/core/CoreTypes.hpp
@@ -9,29 +9,21 @@ namespace olympia::core_types
using RegisterBitMask = sparta::Scoreboard::RegisterBitMask;
//! Register file types
- enum RegFile : uint8_t {
+ enum RegFile : uint8_t
+ {
RF_INTEGER,
RF_FLOAT,
+ RF_VECTOR,
RF_INVALID,
N_REGFILES = RF_INVALID
};
- static inline const char * const regfile_names[] = {
- "integer",
- "float"
- };
-
- static inline const char * const issue_queue_types[] = {
- "alu",
- "fpu",
- "br"
- };
+ static inline const char* const regfile_names[] = {"integer", "float", "vector"};
inline std::ostream & operator<<(std::ostream & os, const RegFile & rf)
{
- sparta_assert(rf < RegFile::RF_INVALID,
- "RF index off into the weeds " << rf);
+ sparta_assert(rf < RegFile::RF_INVALID, "RF index off into the weeds " << rf);
os << regfile_names[rf];
return os;
}
-}
+} // namespace olympia::core_types
diff --git a/core/CoreUtils.hpp b/core/CoreUtils.hpp
index e4e0521b..00e33a90 100644
--- a/core/CoreUtils.hpp
+++ b/core/CoreUtils.hpp
@@ -28,7 +28,8 @@ namespace olympia::coreutils
{mavis::InstMetaData::OperandTypes::DOUBLE, core_types::RegFile::RF_FLOAT},
{mavis::InstMetaData::OperandTypes::WORD, core_types::RegFile::RF_INTEGER},
{mavis::InstMetaData::OperandTypes::LONG, core_types::RegFile::RF_INTEGER},
- {mavis::InstMetaData::OperandTypes::QUAD, core_types::RegFile::RF_INTEGER}};
+ {mavis::InstMetaData::OperandTypes::QUAD, core_types::RegFile::RF_INTEGER},
+ {mavis::InstMetaData::OperandTypes::VECTOR, core_types::RegFile::RF_VECTOR}};
if (auto match = mavis_optype_to_regfile.find(reg.operand_type);
match != mavis_optype_to_regfile.end())
{
diff --git a/core/DCache.cpp b/core/DCache.cpp
index 367bd60e..5c2331b3 100644
--- a/core/DCache.cpp
+++ b/core/DCache.cpp
@@ -1,29 +1,61 @@
#include "DCache.hpp"
+#include "OlympiaAllocators.hpp"
-namespace olympia {
+namespace olympia
+{
const char DCache::name[] = "cache";
- DCache::DCache(sparta::TreeNode *n, const CacheParameterSet *p) :
- sparta::Unit(n),
- l1_always_hit_(p->l1_always_hit),
- cache_latency_(p->cache_latency) {
+ DCache::DCache(sparta::TreeNode* n, const CacheParameterSet* p) :
+ sparta::Unit(n),
+ l1_always_hit_(p->l1_always_hit),
+ cache_line_size_(p->l1_line_size),
+ num_mshr_entries_(p->mshr_entries),
+ mshr_file_("mshr_file", p->mshr_entries, getClock()),
+ mshr_entry_allocator_(
+ sparta::notNull(OlympiaAllocators::getOlympiaAllocators(n))->mshr_entry_allocator)
+ {
+ sparta_assert(num_mshr_entries_ > 0, "There must be atleast 1 MSHR entry");
+
+ in_lsu_lookup_req_.registerConsumerHandler(
+ CREATE_SPARTA_HANDLER_WITH_DATA(DCache, receiveMemReqFromLSU_, MemoryAccessInfoPtr));
+
+ in_l2cache_resp_.registerConsumerHandler(
+ CREATE_SPARTA_HANDLER_WITH_DATA(DCache, receiveRespFromL2Cache_, MemoryAccessInfoPtr));
+
+ in_l2cache_credits_.registerConsumerHandler(
+ CREATE_SPARTA_HANDLER_WITH_DATA(DCache, getCreditsFromL2Cache_, uint32_t));
+
+ in_lsu_lookup_req_.registerConsumerEvent(in_l2_cache_resp_receive_event_);
+ in_l2cache_resp_.registerConsumerEvent(in_l2_cache_resp_receive_event_);
+ setupL1Cache_(p);
+
+ // Pipeline config
+ cache_pipeline_.enableCollection(n);
+ cache_pipeline_.performOwnUpdates();
+ cache_pipeline_.setContinuing(true);
+
+ // Pipeline Handlers
+ cache_pipeline_.registerHandlerAtStage(static_cast(PipelineStage::LOOKUP),
+ CREATE_SPARTA_HANDLER(DCache, handleLookup_));
- in_lsu_lookup_req_.registerConsumerHandler
- (CREATE_SPARTA_HANDLER_WITH_DATA(DCache, getInstsFromLSU_, MemoryAccessInfoPtr));
+ cache_pipeline_.registerHandlerAtStage(static_cast(PipelineStage::DATA_READ),
+ CREATE_SPARTA_HANDLER(DCache, handleDataRead_));
- in_l2cache_credits_.registerConsumerHandler
- (CREATE_SPARTA_HANDLER_WITH_DATA(DCache, getCreditsFromL2Cache_, uint32_t));
+ cache_pipeline_.registerHandlerAtStage(static_cast(PipelineStage::DEALLOCATE),
+ CREATE_SPARTA_HANDLER(DCache, handleDeallocate_));
- in_l2cache_resp_.registerConsumerHandler
- (CREATE_SPARTA_HANDLER_WITH_DATA(DCache, getRespFromL2Cache_, MemoryAccessInfoPtr));
+ mshr_file_.enableCollection(n);
+ }
- // DL1 cache config
+ void DCache::setupL1Cache_(const CacheParameterSet* p)
+ { // DL1 cache config
const uint32_t l1_line_size = p->l1_line_size;
const uint32_t l1_size_kb = p->l1_size_kb;
const uint32_t l1_associativity = p->l1_associativity;
- std::unique_ptr repl(new sparta::cache::TreePLRUReplacement
- (l1_associativity));
+ std::unique_ptr repl(
+ new sparta::cache::TreePLRUReplacement(l1_associativity));
l1_cache_.reset(new CacheFuncModel(getContainer(), l1_size_kb, l1_line_size, *repl));
+ addr_decoder_ = l1_cache_->getAddrDecoder();
}
// Reload cache line
@@ -35,7 +67,7 @@ namespace olympia {
ILOG("DCache reload complete!");
}
- // Access DCache
+ // Access L1Cache
bool DCache::dataLookup_(const MemoryAccessInfoPtr & mem_access_info_ptr)
{
const InstPtr & inst_ptr = mem_access_info_ptr->getInstPtr();
@@ -43,28 +75,34 @@ namespace olympia {
bool cache_hit = false;
- if (l1_always_hit_) {
+ if (l1_always_hit_)
+ {
cache_hit = true;
}
- else {
+ else
+ {
auto cache_line = l1_cache_->peekLine(phyAddr);
cache_hit = (cache_line != nullptr) && cache_line->isValid();
// Update MRU replacement state if DCache HIT
- if (cache_hit) {
+ if (cache_hit)
+ {
l1_cache_->touchMRU(*cache_line);
}
}
- if (l1_always_hit_) {
+ if (l1_always_hit_)
+ {
ILOG("DL1 DCache HIT all the time: phyAddr=0x" << std::hex << phyAddr);
dl1_cache_hits_++;
}
- else if (cache_hit) {
+ else if (cache_hit)
+ {
ILOG("DL1 DCache HIT: phyAddr=0x" << std::hex << phyAddr);
dl1_cache_hits_++;
}
- else {
+ else
+ {
ILOG("DL1 DCache MISS: phyAddr=0x" << std::hex << phyAddr);
dl1_cache_misses_++;
}
@@ -72,37 +110,202 @@ namespace olympia {
return cache_hit;
}
- void DCache::getInstsFromLSU_(const MemoryAccessInfoPtr &memory_access_info_ptr){
- const bool hit = dataLookup_(memory_access_info_ptr);
- if(hit){
- memory_access_info_ptr->setCacheState(MemoryAccessInfo::CacheState::HIT);
- }else{
- memory_access_info_ptr->setCacheState(MemoryAccessInfo::CacheState::MISS);
- // DCache is blocking for now. Busy is set on miss, until the miss is
- // resolved by the L2.
- // For NB behaviour: Poll on dcache_l2cache_credits_ > 0 which means
- // that L2Cache can accept requests from DCache.
- // Provide a corresponsing backpressure mechanism up the pipeline.
- if(!busy_) {
- busy_ = true;
- cache_pending_inst_ = memory_access_info_ptr;
- out_l2cache_req_.send(cache_pending_inst_);
-
- // Set the --dcache_l2cache_credits_ here.
+ // The lookup stage
+ void DCache::handleLookup_()
+ {
+ ILOG("Lookup stage");
+ const auto stage_id = static_cast(PipelineStage::LOOKUP);
+ const MemoryAccessInfoPtr & mem_access_info_ptr = cache_pipeline_[stage_id];
+ ILOG(mem_access_info_ptr << " in Lookup stage");
+ // If the mem request is a refill we dont do anything in the lookup stage
+ if (mem_access_info_ptr->isRefill())
+ {
+ ILOG("Incoming cache refill " << mem_access_info_ptr);
+ return;
+ }
+
+ const bool hit = dataLookup_(mem_access_info_ptr);
+ ILOG(mem_access_info_ptr << " performing lookup " << hit);
+ if (hit)
+ {
+ mem_access_info_ptr->setCacheState(MemoryAccessInfo::CacheState::HIT);
+ out_lsu_lookup_ack_.send(mem_access_info_ptr);
+ return;
+ }
+
+ // Check MSHR Entries for address match
+ const auto & mshr_itb = mem_access_info_ptr->getMSHRInfoIterator();
+
+ if (!mshr_itb.isValid() && mshr_file_.numFree() == 0)
+ {
+ // Should be Nack but miss should work for now
+ mem_access_info_ptr->setCacheState(MemoryAccessInfo::CacheState::MISS);
+ out_lsu_lookup_ack_.send(mem_access_info_ptr);
+ return;
+ }
+
+ if (!mshr_itb.isValid())
+ {
+ if (!mem_access_info_ptr->getMSHRInfoIterator().isValid())
+ {
+ ILOG("Creating new MSHR Entry " << mem_access_info_ptr);
+ allocateMSHREntry_(mem_access_info_ptr);
+ }
+ }
+
+ const auto & mshr_it = mem_access_info_ptr->getMSHRInfoIterator();
+ const uint64_t block_addr = getBlockAddr(mem_access_info_ptr);
+ const bool data_arrived = (*mshr_it)->isDataArrived();
+ const bool is_store_inst = mem_access_info_ptr->getInstPtr()->isStoreInst();
+
+ // All ST are considered Hit
+ if (is_store_inst)
+ {
+ // Update Line fill buffer only if ST
+ ILOG("Write to Line fill buffer (ST), block address:0x" << std::hex << block_addr);
+ (*mshr_it)->setModified(true);
+ (*mshr_it)->setMemRequest(mem_access_info_ptr);
+ mem_access_info_ptr->setCacheState(MemoryAccessInfo::CacheState::HIT);
+ }
+ else if (data_arrived)
+ {
+ ILOG("Hit on Line fill buffer (LD), block address:0x" << std::hex << block_addr);
+ mem_access_info_ptr->setCacheState(MemoryAccessInfo::CacheState::HIT);
+ }
+ else
+ {
+ // Enqueue Load in LMQ
+ ILOG("Load miss inst to LMQ; block address:0x" << std::hex << block_addr);
+ (*mshr_it)->setMemRequest(mem_access_info_ptr);
+ mem_access_info_ptr->setCacheState(MemoryAccessInfo::CacheState::MISS);
+ }
+ out_lsu_lookup_ack_.send(mem_access_info_ptr);
+ }
+
+ uint64_t DCache::getBlockAddr(const MemoryAccessInfoPtr & mem_access_info_ptr) const
+ {
+ const InstPtr & inst_ptr = mem_access_info_ptr->getInstPtr();
+ const auto & inst_target_addr = inst_ptr->getRAdr();
+ return addr_decoder_->calcBlockAddr(inst_target_addr);
+ }
+
+ // Data read stage
+ void DCache::handleDataRead_()
+ {
+ ILOG("Data Read stage");
+ const auto stage_id = static_cast(PipelineStage::DATA_READ);
+ const MemoryAccessInfoPtr & mem_access_info_ptr = cache_pipeline_[stage_id];
+ ILOG(mem_access_info_ptr << " in read stage");
+ if (mem_access_info_ptr->isRefill())
+ {
+ reloadCache_(mem_access_info_ptr->getPhyAddr());
+ return;
+ }
+
+ if (mem_access_info_ptr->isCacheHit())
+ {
+ mem_access_info_ptr->setDataReady(true);
+ }
+ else
+ {
+ if (!l2cache_busy_)
+ {
+ out_l2cache_req_.send(mem_access_info_ptr);
+ l2cache_busy_ = true;
+ }
+ else
+ {
+ uev_mshr_request_.schedule(sparta::Clock::Cycle(1));
+ }
+ }
+ out_lsu_lookup_ack_.send(mem_access_info_ptr);
+ }
+
+ void DCache::mshrRequest_()
+ {
+ ILOG("Send mshr req");
+ if (!l2cache_busy_)
+ {
+ auto iter = mshr_file_.begin();
+ while (iter != mshr_file_.end())
+ {
+
+ if (iter.isValid())
+ {
+ const auto & mshr_entry = *iter;
+ auto mem_info = mshr_entry->getMemRequest();
+ if (mshr_entry->isValid() && !mshr_entry->isDataArrived() && mem_info)
+ {
+ ILOG("Sending mshr request when not busy " << mem_info);
+ out_l2cache_req_.send(mem_info);
+ l2cache_busy_ = true;
+ break;
+ }
+ }
+ ++iter;
+ }
+ }
+ }
+
+ void DCache::handleDeallocate_()
+ {
+ ILOG("Data Dellocate stage");
+ const auto stage_id = static_cast(PipelineStage::DEALLOCATE);
+ const MemoryAccessInfoPtr & mem_access_info_ptr = cache_pipeline_[stage_id];
+ ILOG(mem_access_info_ptr << " in deallocate stage");
+ if (mem_access_info_ptr->isRefill())
+ {
+ const auto & mshr_it = mem_access_info_ptr->getMSHRInfoIterator();
+ if (mshr_it.isValid())
+ {
+ MemoryAccessInfoPtr dependant_load_inst = (*mshr_it)->getMemRequest();
+ out_lsu_lookup_ack_.send(dependant_load_inst);
+
+ ILOG("Removing mshr entry for " << mem_access_info_ptr);
+ mshr_file_.erase(mem_access_info_ptr->getMSHRInfoIterator());
}
+ return;
}
+ ILOG("Deallocating pipeline for " << mem_access_info_ptr);
+ }
+
+ void DCache::receiveMemReqFromLSU_(const MemoryAccessInfoPtr & memory_access_info_ptr)
+ {
+ ILOG("Received memory access request from LSU " << memory_access_info_ptr);
out_lsu_lookup_ack_.send(memory_access_info_ptr);
+ in_l2_cache_resp_receive_event_.schedule();
+ lsu_mem_access_info_ = memory_access_info_ptr;
}
- void DCache::getRespFromL2Cache_(const MemoryAccessInfoPtr &memory_access_info_ptr) {
- out_lsu_lookup_req_.send(cache_pending_inst_);
- reloadCache_(memory_access_info_ptr->getPhyAddr());
- cache_pending_inst_.reset();
- busy_ = false;
+ void DCache::receiveRespFromL2Cache_(const MemoryAccessInfoPtr & memory_access_info_ptr)
+ {
+ ILOG("Received cache refill " << memory_access_info_ptr);
+ // We mark the mem access to refill, this could be moved to the lower level caches later
+ memory_access_info_ptr->setIsRefill(true);
+ l2_mem_access_info_ = memory_access_info_ptr;
+ const auto & mshr_itb = memory_access_info_ptr->getMSHRInfoIterator();
+ if(mshr_itb.isValid()){
+ ILOG("Removing mshr entry for " << memory_access_info_ptr);
+ mshr_file_.erase(memory_access_info_ptr->getMSHRInfoIterator());
+ }
+ l2cache_busy_ = false;
+ in_l2_cache_resp_receive_event_.schedule();
}
void DCache::getCreditsFromL2Cache_(const uint32_t &ack) {
dcache_l2cache_credits_ += ack;
}
-}
+ // MSHR Entry allocation in case of miss
+ void DCache::allocateMSHREntry_(const MemoryAccessInfoPtr & mem_access_info_ptr)
+ {
+ sparta_assert(mshr_file_.size() <= num_mshr_entries_, "Appending mshr causes overflows!");
+
+ MSHREntryInfoPtr mshr_entry = sparta::allocate_sparta_shared_pointer(
+ mshr_entry_allocator_, cache_line_size_, getClock());
+
+ const auto & it = mshr_file_.push_back(mshr_entry);
+ mem_access_info_ptr->setMSHREntryInfoIterator(it);
+ }
+
+} // namespace olympia
diff --git a/core/DCache.hpp b/core/DCache.hpp
index 269d9ce0..e3c3de8e 100644
--- a/core/DCache.hpp
+++ b/core/DCache.hpp
@@ -3,12 +3,15 @@
#include "sparta/simulation/Unit.hpp"
#include "sparta/ports/DataPort.hpp"
#include "sparta/ports/SignalPort.hpp"
+#include "sparta/resources/Pipeline.hpp"
#include "sparta/simulation/ParameterSet.hpp"
+#include "sparta/simulation/Unit.hpp"
#include "sparta/utils/LogUtils.hpp"
#include "CacheFuncModel.hpp"
#include "Inst.hpp"
#include "cache/TreePLRUReplacement.hpp"
#include "MemoryAccessInfo.hpp"
+#include "MSHREntryInfo.hpp"
namespace olympia
{
@@ -24,8 +27,8 @@ namespace olympia
PARAMETER(uint32_t, l1_line_size, 64, "DL1 line size (power of 2)")
PARAMETER(uint32_t, l1_size_kb, 32, "Size of DL1 in KB (power of 2)")
PARAMETER(uint32_t, l1_associativity, 8, "DL1 associativity (power of 2)")
- PARAMETER(uint32_t, cache_latency, 1, "Assumed latency of the memory system")
PARAMETER(bool, l1_always_hit, false, "DL1 will always hit")
+ PARAMETER(uint32_t, mshr_entries, 8, "Number of MSHR Entries")
};
static const char name[];
@@ -42,13 +45,57 @@ namespace olympia
void getRespFromL2Cache_(const MemoryAccessInfoPtr & memory_access_info_ptr);
+ ////////////////////////////////////////////////////////////////////////////////
+ // L1 Data Cache Handling
+ ////////////////////////////////////////////////////////////////////////////////
using L1Handle = CacheFuncModel::Handle;
L1Handle l1_cache_;
const bool l1_always_hit_;
- bool busy_ = false;
- uint32_t cache_latency_ = 0;
+ const uint64_t cache_line_size_;
+ const sparta::cache::AddrDecoderIF* addr_decoder_;
// Keep track of the instruction that causes current outstanding cache miss
- MemoryAccessInfoPtr cache_pending_inst_ = nullptr;
+ // MemoryAccessInfoPtr cache_pending_inst_ = nullptr;
+
+ const uint32_t num_mshr_entries_;
+
+ void setupL1Cache_(const CacheParameterSet* p);
+
+ uint64_t getBlockAddr(const MemoryAccessInfoPtr & mem_access_info_ptr) const;
+
+ using MSHREntryInfoPtr = sparta::SpartaSharedPointer;
+ using MSHREntryIterator = sparta::Buffer::const_iterator;
+ // Ongoing Refill request
+ MSHREntryIterator current_refill_mshr_entry_;
+
+ // Cache Pipeline
+ enum class PipelineStage
+ {
+ LOOKUP = 0,
+ DATA_READ = 1,
+ DEALLOCATE = 2,
+ NUM_STAGES
+ };
+
+ sparta::Pipeline cache_pipeline_{
+ "DCachePipeline", static_cast(PipelineStage::NUM_STAGES), getClock()};
+
+ void handleLookup_();
+ void handleDataRead_();
+ void handleDeallocate_();
+
+ ////////////////////////////////////////////////////////////////////////////////
+ // Handle requests
+ ////////////////////////////////////////////////////////////////////////////////
+
+ void receiveMemReqFromLSU_(const MemoryAccessInfoPtr & memory_access_info_ptr);
+
+ void receiveAckFromL2Cache_(const uint32_t & ack);
+
+ void receiveRespFromL2Cache_(const MemoryAccessInfoPtr & memory_access_info_ptr);
+
+ void mshrRequest_();
+
+ bool l2cache_busy_ = false;
// Credit bool for sending miss request to L2Cache
uint32_t dcache_l2cache_credits_ = 0;
@@ -81,6 +128,40 @@ namespace olympia
////////////////////////////////////////////////////////////////////////////////
// Events
////////////////////////////////////////////////////////////////////////////////
+ sparta::UniqueEvent<> uev_mshr_request_{&unit_event_set_, "mshr_request",
+ CREATE_SPARTA_HANDLER(DCache, mshrRequest_)};
+
+ sparta::utils::ValidValue l2_mem_access_info_;
+ sparta::utils::ValidValue lsu_mem_access_info_;
+
+ void arbitrateL2LsuReq_()
+ {
+ if (l2_mem_access_info_.isValid())
+ {
+ auto mem_access_info_ptr = l2_mem_access_info_.getValue();
+ ILOG("Received Refill request " << mem_access_info_ptr);
+ cache_pipeline_.append(mem_access_info_ptr);
+ }
+ else
+ {
+ auto mem_access_info_ptr = lsu_mem_access_info_.getValue();
+ ILOG("Received LSU request " << mem_access_info_ptr);
+ cache_pipeline_.append(mem_access_info_ptr);
+ }
+ if (l2_mem_access_info_.isValid())
+ {
+ l2_mem_access_info_.clearValid();
+ }
+ if (lsu_mem_access_info_.isValid())
+ {
+ lsu_mem_access_info_.clearValid();
+ }
+ uev_mshr_request_.schedule(1);
+ }
+
+ sparta::UniqueEvent<> in_l2_cache_resp_receive_event_{
+ &unit_event_set_, "in_l2_cache_resp_receive_event",
+ CREATE_SPARTA_HANDLER(DCache, arbitrateL2LsuReq_)};
////////////////////////////////////////////////////////////////////////////////
// Counters
@@ -91,6 +172,14 @@ namespace olympia
sparta::Counter dl1_cache_misses_{getStatisticSet(), "dl1_cache_misses",
"Number of DL1 cache misses",
sparta::Counter::COUNT_NORMAL};
+
+ sparta::StatisticDef dl1_hit_miss_ratio_{getStatisticSet(), "dl1_hit_miss_ratio",
+ "DL1 HIT/MISS Ratio", getStatisticSet(),
+ "dl1_cache_hits/dl1_cache_misses"};
+
+ sparta::Buffer mshr_file_;
+ MSHREntryInfoAllocator & mshr_entry_allocator_;
+ void allocateMSHREntry_(const MemoryAccessInfoPtr & mem_access_info_ptr);
};
} // namespace olympia
diff --git a/core/Decode.cpp b/core/Decode.cpp
index 62752ce5..9a92fbcd 100644
--- a/core/Decode.cpp
+++ b/core/Decode.cpp
@@ -1,45 +1,109 @@
// -*- C++ -*-
-
-#include
-
#include "Decode.hpp"
+#include "VectorUopGenerator.hpp"
+#include "fsl_api/FusionTypes.h"
#include "sparta/events/StartupEvent.hpp"
#include "sparta/utils/LogUtils.hpp"
+#include
+#include
+
+using namespace std;
namespace olympia
{
constexpr char Decode::name[];
- Decode::Decode(sparta::TreeNode * node,
- const DecodeParameterSet * p) :
+ Decode::Decode(sparta::TreeNode* node, const DecodeParameterSet* p) :
sparta::Unit(node),
fetch_queue_("FetchQueue", p->fetch_queue_size, node->getClock(), &unit_stat_set_),
- num_to_decode_(p->num_to_decode)
+ fusion_num_fuse_instructions_(&unit_stat_set_, "fusion_num_fuse_instructions",
+ "The number of custom instructions created by fusion",
+ sparta::Counter::COUNT_NORMAL),
+
+ fusion_num_ghost_instructions_(&unit_stat_set_, "fusion_num_ghost_instructions",
+ "The number of instructions eliminated by fusion",
+ sparta::Counter::COUNT_NORMAL),
+
+ fusion_num_groups_defined_(&unit_stat_set_, "fusion_num_groups_defined",
+ "Number of fusion groups compiled or read at run time",
+ sparta::Counter::COUNT_LATEST),
+
+ fusion_num_groups_utilized_(&unit_stat_set_, "fusion_num_groups_utilized",
+ "Incremented on first use of a fusion group",
+ sparta::Counter::COUNT_LATEST),
+
+ fusion_pred_cycles_saved_(&unit_stat_set_, "fusion_pred_cycles_saved",
+ "Optimistic prediction of the cycles saved by fusion",
+ sparta::Counter::COUNT_NORMAL),
+
+ num_to_decode_(p->num_to_decode),
+ fusion_enable_(p->fusion_enable),
+ fusion_debug_(p->fusion_debug),
+ fusion_enable_register_(p->fusion_enable_register),
+ fusion_max_latency_(p->fusion_max_latency),
+ fusion_match_max_tries_(p->fusion_match_max_tries),
+ fusion_max_group_size_(p->fusion_max_group_size),
+ fusion_summary_report_(p->fusion_summary_report),
+ fusion_group_definitions_(p->fusion_group_definitions),
+ vector_enabled_(true),
+ vector_config_(new VectorConfig(p->init_vl, p->init_sew, p->init_lmul, p->init_vta))
{
+ initializeFusion_();
+
fetch_queue_.enableCollection(node);
- fetch_queue_write_in_.
- registerConsumerHandler(CREATE_SPARTA_HANDLER_WITH_DATA(Decode, fetchBufferAppended_, InstGroupPtr));
- uop_queue_credits_in_.
- registerConsumerHandler(CREATE_SPARTA_HANDLER_WITH_DATA(Decode, receiveUopQueueCredits_, uint32_t));
- in_reorder_flush_.
- registerConsumerHandler(CREATE_SPARTA_HANDLER_WITH_DATA(Decode, handleFlush_, FlushManager::FlushingCriteria));
+ fetch_queue_write_in_.registerConsumerHandler(
+ CREATE_SPARTA_HANDLER_WITH_DATA(Decode, fetchBufferAppended_, InstGroupPtr));
+ uop_queue_credits_in_.registerConsumerHandler(
+ CREATE_SPARTA_HANDLER_WITH_DATA(Decode, receiveUopQueueCredits_, uint32_t));
+ in_reorder_flush_.registerConsumerHandler(
+ CREATE_SPARTA_HANDLER_WITH_DATA(Decode, handleFlush_, FlushManager::FlushingCriteria));
+ in_vset_inst_.registerConsumerHandler(
+ CREATE_SPARTA_HANDLER_WITH_DATA(Decode, processVset_, InstPtr));
sparta::StartupEvent(node, CREATE_SPARTA_HANDLER(Decode, sendInitialCredits_));
}
+ uint32_t Decode::getNumVecUopsRemaining() const
+ {
+ return vector_enabled_ ? vec_uop_gen_->getNumUopsRemaining() : 0;
+ }
+
// Send fetch the initial credit count
void Decode::sendInitialCredits_()
{
fetch_queue_credits_outp_.send(fetch_queue_.capacity());
+
+ // Get pointer to the vector uop generator
+ sparta::TreeNode * root_node = getContainer()->getRoot();
+ vec_uop_gen_ = \
+ root_node->getChild("cpu.core0.decode.vec_uop_gen")->getResourceAs();
+ }
+
+ // -------------------------------------------------------------------
+ // -------------------------------------------------------------------
+ void Decode::initializeFusion_()
+ {
+ if (fusion_enable_)
+ {
+ fuser_ = std::make_unique(fusion_group_definitions_);
+ hcache_ = fusion::HCache(FusionGroupType::jenkins_1aat);
+ fusion_num_groups_defined_ = fuser_->getFusionGroupContainer().size();
+ }
+ else
+ {
+ fuser_ = nullptr;
+ }
}
// Receive Uop credits from Dispatch
- void Decode::receiveUopQueueCredits_(const uint32_t & credits) {
+ void Decode::receiveUopQueueCredits_(const uint32_t & credits)
+ {
uop_queue_credits_ += credits;
- if (fetch_queue_.size() > 0) {
+ if (fetch_queue_.size() > 0)
+ {
ev_decode_insts_event_.schedule(sparta::Clock::Cycle(0));
}
@@ -52,12 +116,45 @@ namespace olympia
void Decode::fetchBufferAppended_(const InstGroupPtr & insts)
{
// Cache the instructions in the instruction queue if we can't decode this cycle
- for(auto & i : *insts)
+ for (auto & i : *insts)
{
fetch_queue_.push(i);
ILOG("Received: " << i);
}
- if (uop_queue_credits_ > 0) {
+ if (uop_queue_credits_ > 0)
+ {
+ ev_decode_insts_event_.schedule(sparta::Clock::Cycle(0));
+ }
+ }
+
+ void Decode::updateVectorConfig_(const InstPtr & inst)
+ {
+ vector_config_ = inst->getVectorConfig();
+
+ // If rs1 is x0 and rd is x0 then the vl is unchanged (assuming it is legal)
+ const uint64_t uid = inst->getOpCodeInfo()->getInstructionUniqueID();
+ if ((uid == MAVIS_UID_VSETVLI) && inst->hasZeroRegSource())
+ {
+ const uint32_t new_vl = \
+ inst->hasZeroRegDest() ? std::min(vector_config_->getVL(), vector_config_->getVLMAX())
+ : vector_config_->getVLMAX();
+ vector_config_->setVL(new_vl);
+ }
+
+ ILOG("Processing vset{i}vl{i} instruction: " << inst << " " << vector_config_);
+ }
+
+ // process vset settings being forward from execution pipe
+ // for set instructions that depend on register
+ void Decode::processVset_(const InstPtr & inst)
+ {
+ updateVectorConfig_(inst);
+
+ // if rs1 != 0, VL = x[rs1], so we assume there's an STF field for VL
+ if (waiting_on_vset_)
+ {
+ // schedule decode, because we've been stalled on vset
+ waiting_on_vset_ = false;
ev_decode_insts_event_.schedule(sparta::Clock::Cycle(0));
}
}
@@ -68,43 +165,161 @@ namespace olympia
ILOG("Got a flush call for " << criteria);
fetch_queue_credits_outp_.send(fetch_queue_.size());
fetch_queue_.clear();
+
+ // Reset the vector uop generator
+ vec_uop_gen_->handleFlush(criteria);
}
// Decode instructions
void Decode::decodeInsts_()
{
- uint32_t num_decode = std::min(uop_queue_credits_, fetch_queue_.size());
- num_decode = std::min(num_decode, num_to_decode_);
+ const uint32_t num_to_decode = std::min(uop_queue_credits_, num_to_decode_);
+
+ // buffer to maximize the chances of a group match limited
+ // by max allowed latency, bounded by max group size
+ if (fusion_enable_)
+ {
+ if (num_to_decode < fusion_max_group_size_ && latency_count_ < fusion_max_latency_)
+ {
+ ++latency_count_;
+ return;
+ }
+ }
+
+ latency_count_ = 0;
- if(num_decode > 0)
+ // For fusion
+ InstUidListType uids;
+
+ // Send instructions on their way to rename
+ InstGroupPtr insts =
+ sparta::allocate_sparta_shared_pointer(instgroup_allocator);
+ // if we have a waiting on vset followed by more instructions, we decode
+ // vset and stall anything else
+ while ((insts->size() < num_to_decode) && !waiting_on_vset_)
{
- InstGroupPtr insts =
- sparta::allocate_sparta_shared_pointer(instgroup_allocator);
- // Send instructions on their way to rename
- for(uint32_t i = 0; i < num_decode; ++i) {
- const auto & inst = fetch_queue_.read(0);
- insts->emplace_back(inst);
- inst->setStatus(Inst::Status::DECODED);
+ if (vec_uop_gen_->getNumUopsRemaining() > 0)
+ {
+ const InstPtr uop = vec_uop_gen_->generateUop();
+ insts->emplace_back(uop);
+ uop->setStatus(Inst::Status::DECODED);
+ }
+ else if (fetch_queue_.size() > 0)
+ {
+ sparta_assert(fetch_queue_.size() > 0,
+ "Cannot read from the fetch queue because it is empty!");
+ auto & inst = fetch_queue_.read(0);
+
+ // for vector instructions, we block on vset and do not allow any other
+ // processing of instructions until the vset is resolved optimizations could be
+ // to allow scalar operations to move forward until a subsequent vector
+ // instruction is detected or do vset prediction
+
+ // vsetvl always block
+ // vsetvli only blocks if rs1 is not x0
+ // vsetivli never blocks
+ const uint64_t uid = inst->getOpCodeInfo()->getInstructionUniqueID();
+ if ((uid == MAVIS_UID_VSETIVLI) ||
+ ((uid == MAVIS_UID_VSETVLI) && inst->hasZeroRegSource()))
+ {
+ updateVectorConfig_(inst);
+ }
+ else if (uid == MAVIS_UID_VSETVLI || uid == MAVIS_UID_VSETVL)
+ {
+ // block for vsetvl or vsetvli when rs1 of vsetvli is NOT 0
+ waiting_on_vset_ = true;
+ // need to indicate we want a signal sent back at execute
+ inst->setBlockingVSET(true);
+ ILOG("Decode stalled, Waiting on vset that has register dependency: " << inst)
+ }
+ else
+ {
+ if (!inst->isVset() && inst->isVector())
+ {
+ // set LMUL, VSET, VL, VTA for any other vector instructions
+ inst->setVectorConfig(vector_config_);
+ }
+ }
ILOG("Decoded: " << inst);
+ // Even if LMUL == 1, we need the vector uop generator to create a uop for us
+ // because some generators will add additional sources and destinations to the
+ // instruction (e.g. widening, multiply-add, slides).
+ if (inst->isVector() && !inst->isVset() && (inst->getUopGenType() != InstArchInfo::UopGenType::NONE))
+ {
+ ILOG("Vector uop gen: " << inst);
+ vec_uop_gen_->setInst(inst);
+
+ const InstPtr uop = vec_uop_gen_->generateUop();
+ insts->emplace_back(uop);
+ uop->setStatus(Inst::Status::DECODED);
+ }
+ else
+ {
+ insts->emplace_back(inst);
+ inst->setStatus(Inst::Status::DECODED);
+ }
+
+ if (fusion_enable_)
+ {
+ uids.push_back(inst->getMavisUid());
+ }
+
+ // Remove from Fetch Queue
fetch_queue_.pop();
}
+ else
+ {
+ // Nothing left to decode
+ break;
+ }
+ }
- // Send decoded instructions to rename
- uop_queue_outp_.send(insts);
+ if (fusion_enable_)
+ {
+ MatchInfoListType matches;
+ uint32_t max_itrs = 0;
+ FusionGroupContainerType & container = fuser_->getFusionGroupContainer();
+ do
+ {
+ matchFusionGroups_(matches, insts, uids, container);
+ processMatches_(matches, insts, uids);
+ // Future feature whereIsEgon(insts,numGhosts);
+ ++max_itrs;
+ } while (matches.size() > 0 && max_itrs < fusion_match_max_tries_);
- // Decrement internal Uop Queue credits
- uop_queue_credits_ -= insts->size();
+ if (max_itrs >= fusion_match_max_tries_)
+ {
+ throw sparta::SpartaException("Fusion group match watch dog exceeded.");
+ }
- // Send credits back to Fetch to get more instructions
- fetch_queue_credits_outp_.send(insts->size());
+ // Debug statement
+ if (fusion_debug_)
+ {
+ infoInsts_(cout, insts);
+ }
}
+ // Send decoded instructions to rename
+ uop_queue_outp_.send(insts);
+
+ // TODO: whereisegon() would remove the ghosts,
+ // Commented out for now, in practice insts
+ // would be smaller due to the fused ops
+ // uint32_t unfusedInstsSize = insts->size();
+
+ // Decrement internal Uop Queue credits
+ uop_queue_credits_ -= insts->size();
+
+ // Send credits back to Fetch to get more instructions
+ fetch_queue_credits_outp_.send(insts->size());
+
// If we still have credits to send instructions as well as
// instructions in the queue, schedule another decode session
- if(uop_queue_credits_ > 0 && fetch_queue_.size() > 0) {
+ if (uop_queue_credits_ > 0 && (fetch_queue_.size() + getNumVecUopsRemaining()) > 0)
+ {
ev_decode_insts_event_.schedule(1);
}
}
-}
+} // namespace olympia
diff --git a/core/Decode.hpp b/core/Decode.hpp
index 73b600bc..3d807daf 100644
--- a/core/Decode.hpp
+++ b/core/Decode.hpp
@@ -1,22 +1,34 @@
// -*- C++ -*-
+//! \file Decode.hpp
+#pragma once
+#include "CoreTypes.hpp"
+#include "FlushManager.hpp"
+#include "InstGroup.hpp"
+#include "MavisUnit.hpp"
+#include "fsl_api/FieldExtractor.h"
+#include "fsl_api/Fusion.h"
+#include "fsl_api/FusionGroup.h"
+#include "fsl_api/FusionTypes.h"
+#include "fsl_api/HCache.h"
+#include "fsl_api/MachineInfo.h"
-#pragma once
-
-#include
#include "sparta/ports/DataPort.hpp"
#include "sparta/events/UniqueEvent.hpp"
#include "sparta/simulation/Unit.hpp"
#include "sparta/simulation/TreeNode.hpp"
#include "sparta/simulation/ParameterSet.hpp"
-#include "CoreTypes.hpp"
-#include "FlushManager.hpp"
-#include "InstGroup.hpp"
+
+#include
+#include