Full Code of clamchowder/Microbenchmarks for AI

master 13159d44086d cached
315 files
3.0 MB
790.1k tokens
2565 symbols
1 requests
Download .txt
Showing preview only (3,158K chars total). Download the full file or copy to clipboard to get everything.
Repository: clamchowder/Microbenchmarks
Branch: master
Commit: 13159d44086d
Files: 315
Total size: 3.0 MB

Directory structure:
gitextract_nqotrkr3/

├── .github/
│   └── workflows/
│       └── linux.yaml
├── .gitignore
├── AsmGen/
│   ├── AsmGen.csproj
│   ├── AsmGen.sln
│   ├── DataFiles/
│   │   ├── BranchhistTestBlock.c
│   │   ├── CommonFunctions.c
│   │   ├── GccBranchHistFunction.c
│   │   ├── GccIndirectBranchFunction.c
│   │   ├── IndirectBranchTestBlock.c
│   │   └── clammicrobench.vcxproj_template
│   ├── IUarchTest.cs
│   ├── Program.cs
│   ├── Properties/
│   │   └── launchSettings.json
│   ├── README.md
│   ├── UarchTest.cs
│   ├── UarchTestHelpers.cs
│   └── tests/
│       ├── A73RobTest.cs
│       ├── AddLoopTest.cs
│       ├── AddNsq.cs
│       ├── AddSchedTest.cs
│       ├── AddvNsq.cs
│       ├── AddvSchedTest.cs
│       ├── AeseSchedTest.cs
│       ├── AesencNsq.cs
│       ├── BranchBufferTest.cs
│       ├── BranchHistoryTest.cs
│       ├── BtbTest.cs
│       ├── CvtSchedTest.cs
│       ├── FAdd256RfTest.cs
│       ├── Fadd128RfTest.cs
│       ├── Fadd128SchedTest.cs
│       ├── Fadd256SchedTest.cs
│       ├── FaddNsq.cs
│       ├── FaddSchedTest.cs
│       ├── FcmpSchedTest.cs
│       ├── FlagRfTest.cs
│       ├── Fma256SchedTest.cs
│       ├── FmovSched.cs
│       ├── FmulSchedTest.cs
│       ├── FpRfTest.cs
│       ├── FpStoreDataNsq.cs
│       ├── IdrfTest.cs
│       ├── IndirectBranchTest.cs
│       ├── IntRfDepStoreTest.cs
│       ├── IntRfTest.cs
│       ├── JsCvtNsq.cs
│       ├── JsCvtSched.cs
│       ├── JumpNsqTest.cs
│       ├── JumpSchedTest.cs
│       ├── LdqTest.cs
│       ├── LeaSchedTest.cs
│       ├── LoadNsq.cs
│       ├── LoadSchedTest.cs
│       ├── MaddSchedTest.cs
│       ├── MaskRfTest.cs
│       ├── MixAddJumpSched.cs
│       ├── MixAddvJsCvtNsq.cs
│       ├── MixAddvJsCvtSched.cs
│       ├── MixBranchStoreTest.cs
│       ├── MixFAdd256and32RfTest.cs
│       ├── MixFpRfDepBranchTest.cs
│       ├── MixFpVecRfTest.cs
│       ├── MixIntRfDepBranchTest.cs
│       ├── MixIntVec128RfTest.cs
│       ├── MixIntrfFprfTest.cs
│       ├── MixJumpStoreDataSched.cs
│       ├── MixJumpStoreSchedTest.cs
│       ├── MixJumpThenAddSched.cs
│       ├── MixLdqStqTest.cs
│       ├── MixLoadStoreDivSchedTest.cs
│       ├── MixLoadStoreSchedTest.cs
│       ├── MixStoreDivSchedTest.cs
│       ├── MixVec512Vec256BlockRfTest.cs
│       ├── MixVec512Vec256RfTest.cs
│       ├── MmxRfTest.cs
│       ├── MulSchedTest.cs
│       ├── NopLoopTest.cs
│       ├── PdepSchedTest.cs
│       ├── ReturnStackTest.cs
│       ├── RobTest.cs
│       ├── RorSchedTest.cs
│       ├── ShlSchedTest.cs
│       ├── StoreDataDivNsqTest.cs
│       ├── StoreDataNsqTest.cs
│       ├── StoreDataSchedTest.cs
│       ├── StoreDivNsqTest.cs
│       ├── StoreDivSchedTest.cs
│       ├── StoreNsq.cs
│       ├── StoreSchedTest.cs
│       ├── Stq128Test.cs
│       ├── Stq512Test.cs
│       ├── StqTest.cs
│       ├── TakenBranchBufferTest.cs
│       ├── TakenJumpSchedTest.cs
│       ├── Vec512RfTest.cs
│       ├── VecMulNsq.cs
│       └── ZeroRobTest.cs
├── CoherencyLatency/
│   ├── CoherencyLatency.cpp
│   ├── CoherencyLatency.sln
│   ├── CoherencyLatency.vcxproj
│   ├── Makefile
│   ├── PThreadsCoherencyLatency.c
│   └── c2cparse/
│       ├── Program.cs
│       ├── c2cparse.csproj
│       └── c2cparse.sln
├── Common/
│   ├── arch_detect.mk
│   ├── ci_gpumemlatency.sh
│   ├── ci_package.sh
│   ├── perfmon.h
│   ├── timing.c
│   └── timing.h
├── CoreClockChecker/
│   ├── BoostClockChecker.c
│   ├── BoostClockChecker_arm.s
│   ├── BoostClockChecker_x86.s
│   ├── CoreClockChecker.c
│   ├── CoreClockChecker_x86.s
│   ├── Makefile
│   └── WinCoreClockChecker/
│       ├── CoreClockCheckFunctions.asm
│       ├── WinCoreClockChecker.cpp
│       ├── WinCoreClockChecker.sln
│       ├── WinCoreClockChecker.vcxproj
│       └── WinCoreClockChecker.vcxproj.filters
├── GpuMemLatency/
│   ├── Makefile
│   ├── OpenCL/
│   │   ├── LICENSE
│   │   ├── README.md
│   │   ├── include/
│   │   │   └── CL/
│   │   │       ├── cl.h
│   │   │       ├── cl_d3d10.h
│   │   │       ├── cl_d3d11.h
│   │   │       ├── cl_dx9_media_sharing.h
│   │   │       ├── cl_dx9_media_sharing_intel.h
│   │   │       ├── cl_egl.h
│   │   │       ├── cl_ext.h
│   │   │       ├── cl_ext_intel.h
│   │   │       ├── cl_gl.h
│   │   │       ├── cl_gl_ext.h
│   │   │       ├── cl_half.h
│   │   │       ├── cl_icd.h
│   │   │       ├── cl_platform.h
│   │   │       ├── cl_va_api_media_sharing_intel.h
│   │   │       ├── cl_version.h
│   │   │       └── opencl.h
│   │   └── lib/
│   │       └── OpenCL.lib
│   ├── atomic_test.c
│   ├── bw_test.c
│   ├── common.c
│   ├── instruction_rate.c
│   ├── instruction_rate_fp16_kernel.cl
│   ├── instruction_rate_fp64_kernel.cl
│   ├── instruction_rate_kernel.cl
│   ├── kernel.cl
│   ├── kernels/
│   │   ├── atomic_exec_latency_test.cl
│   │   ├── buffer_bw_test.cl
│   │   ├── c2c_atomic_exec_latency_test.cl
│   │   ├── constant_unrolled_latency_test.cl
│   │   ├── ldst_bw_test.cl
│   │   ├── local_64_bw_test.cl
│   │   ├── local_atomic_latency_test.cl
│   │   ├── local_bw_test.cl
│   │   ├── local_float4_bw_test.cl
│   │   ├── local_unrolled_latency_test.cl
│   │   ├── scalar_unrolled_latency_test.cl
│   │   ├── sum_bw_test.cl
│   │   ├── tex_bw_test.cl
│   │   ├── tex_latency_test.cl
│   │   └── unrolled_latency_test.cl
│   ├── latency_test.c
│   ├── local_mem_latency_kernel.cl
│   ├── opencltest.c
│   ├── opencltest.h
│   ├── opencltest.sln
│   ├── opencltest.vcxproj
│   ├── opencltest.vcxproj.filters
│   └── texturetest.c
├── InstructionRate/
│   ├── Makefile
│   ├── arm_instructionrate.c
│   ├── arm_instructionrate.s
│   ├── riscv_instructionrate.c
│   ├── riscv_instructionrate.s
│   ├── test.s
│   ├── x86_fusion.c
│   ├── x86_fusion.s
│   ├── x86_instructionrate.c
│   └── x86_instructionrate.s
├── LICENSE
├── LoadedMemoryLatency/
│   ├── LoadedMemoryLatency/
│   │   ├── LoadedMemoryLatency.asm
│   │   ├── LoadedMemoryLatency.cpp
│   │   ├── LoadedMemoryLatency.sln
│   │   ├── LoadedMemoryLatency.vcxproj
│   │   └── LoadedMemoryLatency.vcxproj.filters
│   ├── LoadedMemoryLatency.c
│   ├── LoadedMemoryLatency_amd64.s
│   ├── LoadedMemoryLatency_arm.s
│   └── Makefile
├── Makefile
├── MemoryBandwidth/
│   ├── Makefile
│   ├── MemoryBandwidth/
│   │   ├── MemoryBandwidth.cpp
│   │   ├── MemoryBandwidth.sln
│   │   ├── MemoryBandwidth.vcxproj
│   │   ├── MemoryBandwidth.vcxproj.filters
│   │   ├── MemoryBandwidthFunctions.asm
│   │   └── MemoryBandwidthFunctions32.asm
│   ├── MemoryBandwidth.c
│   ├── MemoryBandwidth_arm.s
│   ├── MemoryBandwidth_riscv.s
│   ├── MemoryBandwidth_x86.s
│   ├── MixedMemoryBandwidthTest/
│   │   ├── MemoryBandwidth.h
│   │   ├── MemoryBandwidthFunctions.asm
│   │   ├── MixedMemoryBandwidthTest.cpp
│   │   ├── MixedMemoryBandwidthTest.vcxproj
│   │   └── MixedMemoryBandwidthTest.vcxproj.filters
│   └── README.md
├── MemoryLatency/
│   ├── Makefile
│   ├── MemoryLatency.c
│   ├── MemoryLatency.cpp
│   ├── MemoryLatency.sln
│   ├── MemoryLatency.vcxproj
│   ├── MemoryLatencyFunctions.asm
│   ├── MemoryLatency_arm.s
│   ├── MemoryLatency_i686.s
│   ├── MemoryLatency_riscv.s
│   ├── MemoryLatency_x86.s
│   └── README.md
├── README.md
├── mt_instructionrate/
│   ├── InstructionRateFunctions.asm
│   ├── Makefile
│   ├── Project1.vcxproj
│   ├── Project1.vcxproj.filters
│   ├── arm_mt_instructionrate.c
│   ├── arm_mt_instructionrate.s
│   ├── mt_instructionrate.c
│   ├── mt_instructionrate.sln
│   ├── ppc64_mt_instructionrate.c
│   ├── ppc64_mt_instructionrate.s
│   ├── x86_mt_instructionrate
│   ├── x86_mt_instructionrate.c
│   └── x86_mt_instructionrate.s
└── svm/
    ├── OpenCL/
    │   ├── include/
    │   │   └── CL/
    │   │       ├── Utils/
    │   │       │   ├── Context.h
    │   │       │   ├── Context.hpp
    │   │       │   ├── Detail.hpp
    │   │       │   ├── Device.hpp
    │   │       │   ├── Error.h
    │   │       │   ├── Error.hpp
    │   │       │   ├── ErrorCodes.h
    │   │       │   ├── Event.h
    │   │       │   ├── Event.hpp
    │   │       │   ├── File.h
    │   │       │   ├── File.hpp
    │   │       │   ├── InteropContext.hpp
    │   │       │   ├── OpenCLUtilsCpp_Export.h
    │   │       │   ├── OpenCLUtils_Export.h
    │   │       │   ├── Platform.hpp
    │   │       │   ├── Utils.h
    │   │       │   └── Utils.hpp
    │   │       ├── cl.h
    │   │       ├── cl2.hpp
    │   │       ├── cl_d3d10.h
    │   │       ├── cl_d3d11.h
    │   │       ├── cl_dx9_media_sharing.h
    │   │       ├── cl_dx9_media_sharing_intel.h
    │   │       ├── cl_egl.h
    │   │       ├── cl_ext.h
    │   │       ├── cl_ext_intel.h
    │   │       ├── cl_function_types.h
    │   │       ├── cl_gl.h
    │   │       ├── cl_gl_ext.h
    │   │       ├── cl_half.h
    │   │       ├── cl_icd.h
    │   │       ├── cl_layer.h
    │   │       ├── cl_platform.h
    │   │       ├── cl_va_api_media_sharing_intel.h
    │   │       ├── cl_version.h
    │   │       ├── opencl.h
    │   │       └── opencl.hpp
    │   ├── lib/
    │   │   ├── OpenCL.lib
    │   │   ├── OpenCLExt.lib
    │   │   ├── OpenCLUtils.lib
    │   │   ├── OpenCLUtilsCpp.lib
    │   │   ├── OpenCLUtilsCppd.lib
    │   │   ├── OpenCLUtilsd.lib
    │   │   └── pkgconfig/
    │   │       └── OpenCL.pc
    │   └── share/
    │       ├── cmake/
    │       │   ├── OpenCL/
    │       │   │   ├── OpenCLConfig.cmake
    │       │   │   └── OpenCLConfigVersion.cmake
    │       │   ├── OpenCLExtensionLoader/
    │       │   │   ├── OpenCLExtensionLoaderConfig.cmake
    │       │   │   ├── OpenCLExtensionLoaderConfigVersion.cmake
    │       │   │   ├── OpenCLExtensionLoaderTargets-debug.cmake
    │       │   │   ├── OpenCLExtensionLoaderTargets-release.cmake
    │       │   │   └── OpenCLExtensionLoaderTargets.cmake
    │       │   ├── OpenCLHeaders/
    │       │   │   ├── OpenCLHeadersConfig.cmake
    │       │   │   ├── OpenCLHeadersConfigVersion.cmake
    │       │   │   └── OpenCLHeadersTargets.cmake
    │       │   ├── OpenCLHeadersCpp/
    │       │   │   ├── OpenCLHeadersCppConfig.cmake
    │       │   │   ├── OpenCLHeadersCppConfigVersion.cmake
    │       │   │   └── OpenCLHeadersCppTargets.cmake
    │       │   ├── OpenCLICDLoader/
    │       │   │   ├── OpenCLICDLoaderConfig.cmake
    │       │   │   ├── OpenCLICDLoaderConfigVersion.cmake
    │       │   │   ├── OpenCLICDLoaderTargets-debug.cmake
    │       │   │   ├── OpenCLICDLoaderTargets-release.cmake
    │       │   │   └── OpenCLICDLoaderTargets.cmake
    │       │   ├── OpenCLUtils/
    │       │   │   ├── OpenCLUtilsConfig.cmake
    │       │   │   ├── OpenCLUtilsConfigVersion.cmake
    │       │   │   ├── OpenCLUtilsTargets-debug.cmake
    │       │   │   ├── OpenCLUtilsTargets-release.cmake
    │       │   │   └── OpenCLUtilsTargets.cmake
    │       │   └── OpenCLUtilsCpp/
    │       │       ├── OpenCLUtilsCppConfig.cmake
    │       │       ├── OpenCLUtilsCppConfigVersion.cmake
    │       │       ├── OpenCLUtilsCppTargets-debug.cmake
    │       │       ├── OpenCLUtilsCppTargets-release.cmake
    │       │       └── OpenCLUtilsCppTargets.cmake
    │       └── pkgconfig/
    │           ├── OpenCL-CLHPP.pc
    │           └── OpenCL-Headers.pc
    ├── atomic_latency_kernel.cl
    ├── svm.sln
    ├── svm.vcxproj
    ├── svm.vcxproj.filters
    └── svmtest.cpp

================================================
FILE CONTENTS
================================================

================================================
FILE: .github/workflows/linux.yaml
================================================
name: Build Benchmarks on Ubuntu
on: [push]
jobs:
  BuildBenchmarks:
    # Only Ubuntu for now.
    runs-on: ubuntu-latest
    steps:
      - name: Install prerequisites
        run: sudo apt update && sudo apt -qq --assume-yes full-upgrade && sudo apt install -qq -y build-essential crossbuild-essential-arm64 gcc-riscv64-linux-gnu ocl-icd-opencl-dev opencl-headers libnuma-dev b3sum unzip
      - name: Wild tomfoolery attempt
        run: eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)" && brew install mingw-w64
      - name: Check out repository code
        uses: actions/checkout@v3
      - name: Build all benchmarks
        run: eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)" && make ci
      - name: Package benchmarks
        run: make package
      - name: b3sum
        run: b3sum clammarks.txz
#      - name: Upload package
#        env:
#          UPLOAD_KEY: ${{ secrets.UPLOAD_KEY }}
#          UPLOAD_URL: ${{ secrets.UPLOAD_URL }}
#        run:  curl -X PUT -T clammarks.txz -H "$UPLOAD_KEY" "$UPLOAD_URL"


================================================
FILE: .gitignore
================================================
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
##
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore

# User-specific files
*.rsuser
*.suo
*.user
*.userosscache
*.sln.docstates
*.swp
*generatednasm*
*.exe
MemoryBandwidth/membw_*
MemoryLatency/MemoryLatency

# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs

# Mono auto generated files
mono_crash.*

# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
[Ww][Ii][Nn]32/
[Aa][Rr][Mm]/
[Aa][Rr][Mm]64/
bld/
[Bb]in/
[Oo]bj/
[Ll]og/
[Ll]ogs/
clammicrobench/*.asm

# Visual Studio 2015/2017 cache/options directory
.vs/
# Uncomment if you have tasks that create the project's static files in wwwroot
#wwwroot/

# Visual Studio 2017 auto generated files
Generated\ Files/

# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*

# NUnit
*.VisualState.xml
TestResult.xml
nunit-*.xml

# Build Results of an ATL Project
[Dd]ebugPS/
[Rr]eleasePS/
dlldata.c

# Benchmark Results
BenchmarkDotNet.Artifacts/

# .NET Core
project.lock.json
project.fragment.lock.json
artifacts/

# ASP.NET Scaffolding
ScaffoldingReadMe.txt

# StyleCop
StyleCopReport.xml

# Files built by Visual Studio
*_i.c
*_p.c
*_h.h
*.ilk
*.meta
*.obj
*.iobj
*.pch
*.pdb
*.ipdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*_wpftmp.csproj
*.log
*.tlog
*.vspscc
*.vssscc
.builds
*.pidb
*.svclog
*.scc

# Chutzpah Test files
_Chutzpah*

# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opendb
*.opensdf
*.sdf
*.cachefile
*.VC.db
*.VC.VC.opendb

# Visual Studio profiler
*.psess
*.vsp
*.vspx
*.sap

# Visual Studio Trace Files
*.e2e

# TFS 2012 Local Workspace
$tf/

# Guidance Automation Toolkit
*.gpState

# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user

# TeamCity is a build add-in
_TeamCity*

# DotCover is a Code Coverage Tool
*.dotCover

# AxoCover is a Code Coverage Tool
.axoCover/*
!.axoCover/settings.json

# Coverlet is a free, cross platform Code Coverage Tool
coverage*.json
coverage*.xml
coverage*.info

# Visual Studio code coverage results
*.coverage
*.coveragexml

# NCrunch
_NCrunch_*
.*crunch*.local.xml
nCrunchTemp_*

# MightyMoose
*.mm.*
AutoTest.Net/

# Web workbench (sass)
.sass-cache/

# Installshield output folder
[Ee]xpress/

# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html

# Click-Once directory
publish/

# Publish Web Output
*.[Pp]ublish.xml
*.azurePubxml
# Note: Comment the next line if you want to checkin your web deploy settings,
# but database connection strings (with potential passwords) will be unencrypted
*.pubxml
*.publishproj

# Microsoft Azure Web App publish settings. Comment the next line if you want to
# checkin your Azure Web App publish settings, but sensitive information contained
# in these scripts will be unencrypted
PublishScripts/

# NuGet Packages
*.nupkg
# NuGet Symbol Packages
*.snupkg
# The packages folder can be ignored because of Package Restore
**/[Pp]ackages/*
# except build/, which is used as an MSBuild target.
!**/[Pp]ackages/build/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/[Pp]ackages/repositories.config
# NuGet v3's project.json files produces more ignorable files
*.nuget.props
*.nuget.targets

# Nuget personal access tokens and Credentials
nuget.config

# Microsoft Azure Build Output
csx/
*.build.csdef

# Microsoft Azure Emulator
ecf/
rcf/

# Windows Store app package directories and files
AppPackages/
BundleArtifacts/
Package.StoreAssociation.xml
_pkginfo.txt
*.appx
*.appxbundle
*.appxupload

# Visual Studio cache files
# files ending in .cache can be ignored
*.[Cc]ache
# but keep track of directories ending in .cache
!?*.[Cc]ache/

# Others
ClientBin/
~$*
*~
*.dbmdl
*.dbproj.schemaview
*.jfm
*.pfx
*.publishsettings
orleans.codegen.cs

# Including strong name files can present a security risk
# (https://github.com/github/gitignore/pull/2483#issue-259490424)
#*.snk

# Since there are multiple workflows, uncomment next line to ignore bower_components
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
#bower_components/

# RIA/Silverlight projects
Generated_Code/

# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm
ServiceFabricBackup/
*.rptproj.bak

# SQL Server files
*.mdf
*.ldf
*.ndf

# Business Intelligence projects
*.rdl.data
*.bim.layout
*.bim_*.settings
*.rptproj.rsuser
*- [Bb]ackup.rdl
*- [Bb]ackup ([0-9]).rdl
*- [Bb]ackup ([0-9][0-9]).rdl

# Microsoft Fakes
FakesAssemblies/

# GhostDoc plugin setting file
*.GhostDoc.xml

# Node.js Tools for Visual Studio
.ntvs_analysis.dat
node_modules/

# Visual Studio 6 build log
*.plg

# Visual Studio 6 workspace options file
*.opt

# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
*.vbw

# Visual Studio LightSwitch build output
**/*.HTMLClient/GeneratedArtifacts
**/*.DesktopClient/GeneratedArtifacts
**/*.DesktopClient/ModelManifest.xml
**/*.Server/GeneratedArtifacts
**/*.Server/ModelManifest.xml
_Pvt_Extensions

# Paket dependency manager
.paket/paket.exe
paket-files/

# FAKE - F# Make
.fake/

# CodeRush personal settings
.cr/personal

# Python Tools for Visual Studio (PTVS)
__pycache__/
*.pyc

# Cake - Uncomment if you are using it
# tools/**
# !tools/packages.config

# Tabs Studio
*.tss

# Telerik's JustMock configuration file
*.jmconfig

# BizTalk build output
*.btp.cs
*.btm.cs
*.odx.cs
*.xsd.cs

# OpenCover UI analysis results
OpenCover/

# Azure Stream Analytics local run output
ASALocalRun/

# MSBuild Binary and Structured Log
*.binlog

# NVidia Nsight GPU debugger configuration file
*.nvuser

# MFractors (Xamarin productivity tool) working folder
.mfractor/

# Local History for Visual Studio
.localhistory/

# BeatPulse healthcheck temp database
healthchecksdb

# Backup folder for Package Reference Convert tool in Visual Studio 2017
MigrationBackup/

# Ionide (cross platform F# VS Code tools) working folder
.ionide/

# Fody - auto-generated XML schema
FodyWeavers.xsd

# VS Code files for those working on multiple tools
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
*.code-workspace

# Local History for Visual Studio Code
.history/

# Windows Installer files from build outputs
*.cab
*.msi
*.msix
*.msm
*.msp

# JetBrains Rider
.idea/
*.sln.iml


================================================
FILE: AsmGen/AsmGen.csproj
================================================
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net8.0</TargetFramework>
    <Prefer32Bit>false</Prefer32Bit>
    <PlatformTarget>x64</PlatformTarget>
    <Platforms>AnyCPU;x64</Platforms>
  </PropertyGroup>

  <ItemGroup>
    <None Update="$([System.IO.Path]::Combine('Datafiles','clammicrobench.vcxproj_template'))">
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </None>
    <None Update="$([System.IO.Path]::Combine('Datafiles','GccBranchHistFunction.c'))">
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </None>
    <None Update="$([System.IO.Path]::Combine('Datafiles','IndirectBranchTestBlock.c'))">
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </None>
    <None Update="$([System.IO.Path]::Combine('Datafiles','BranchhistTestBlock.c'))">
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </None>
    <None Update="$([System.IO.Path]::Combine('Datafiles','GccIndirectBranchFunction.c'))">
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </None>
    <None Update="$([System.IO.Path]::Combine('Datafiles','CommonFunctions.c'))">
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </None>
  </ItemGroup>
</Project>


================================================
FILE: AsmGen/AsmGen.sln
================================================

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.2.32516.85
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AsmGen", "AsmGen.csproj", "{B8930E86-946C-4831-B088-F571E73EEDC4}"
EndProject
Global
	GlobalSection(SolutionConfigurationPlatforms) = preSolution
		Debug|Any CPU = Debug|Any CPU
		Debug|x64 = Debug|x64
		Release|Any CPU = Release|Any CPU
		Release|x64 = Release|x64
	EndGlobalSection
	GlobalSection(ProjectConfigurationPlatforms) = postSolution
		{B8930E86-946C-4831-B088-F571E73EEDC4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{B8930E86-946C-4831-B088-F571E73EEDC4}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{B8930E86-946C-4831-B088-F571E73EEDC4}.Debug|x64.ActiveCfg = Debug|x64
		{B8930E86-946C-4831-B088-F571E73EEDC4}.Debug|x64.Build.0 = Debug|x64
		{B8930E86-946C-4831-B088-F571E73EEDC4}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{B8930E86-946C-4831-B088-F571E73EEDC4}.Release|Any CPU.Build.0 = Release|Any CPU
		{B8930E86-946C-4831-B088-F571E73EEDC4}.Release|x64.ActiveCfg = Release|x64
		{B8930E86-946C-4831-B088-F571E73EEDC4}.Release|x64.Build.0 = Release|x64
	EndGlobalSection
	GlobalSection(SolutionProperties) = preSolution
		HideSolutionNode = FALSE
	EndGlobalSection
	GlobalSection(ExtensibilityGlobals) = postSolution
		SolutionGuid = {4433D029-CD62-44B9-862E-A8DE52DA45CE}
	EndGlobalSection
EndGlobal


================================================
FILE: AsmGen/DataFiles/BranchhistTestBlock.c
================================================
uint32_t testSizeCount = sizeof(branchHistoryLengths) / sizeof(int);
initializeBranchHistFuncArr();
srand(time(NULL));

size_t resultSize = sizeof(float) * maxBranchCount * testSizeCount;
float* randomResults = (float*)malloc(resultSize);
float* predictableResults = (float*)malloc(resultSize);
for (uint32_t branchCountIdx = 0; branchCountIdx < maxBranchCount; branchCountIdx++) {
    for (uint32_t testSizeIdx = 0; testSizeIdx < testSizeCount; testSizeIdx++) {
        uint32_t testSize = branchHistoryLengths[testSizeIdx];
        uint32_t branchCount = branchCounts[branchCountIdx];
        printf("Testing branch count %d history length %d\n", branchCount, testSize);
        randomResults[branchCountIdx * testSizeCount + testSizeIdx] = runBranchHistTest(testSize, branchCountIdx, 1);
        predictableResults[branchCountIdx * testSizeCount + testSizeIdx] = runBranchHistTest(testSize, branchCountIdx, 0);
        printf("%d, %f, %f\n", testSize,
            randomResults[branchCountIdx * testSizeCount + testSizeIdx],
            predictableResults[branchCountIdx * testSizeCount + testSizeIdx]);
    }
}

printf("Random:\n");
printResultFloatArr(randomResults, branchHistoryLengths, testSizeCount, branchCounts, maxBranchCount);
printf("\nPredictable:\n");
printResultFloatArr(predictableResults, branchHistoryLengths, testSizeCount, branchCounts, maxBranchCount);

free(randomResults);
free(predictableResults);


================================================
FILE: AsmGen/DataFiles/CommonFunctions.c
================================================
// this is a partial C file that's appended into generated code
// stuff here is generic enough to work for both windows/vs and gcc

#ifndef __MINGW32__
// optional affinity setting for effed up qualcomm/android bs
#include <sched.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/syscall.h>
#include <pthread.h>

void setAffinity(int core) {
    cpu_set_t cpuset;
    CPU_ZERO(&cpuset);
    CPU_SET(core, &cpuset);
    printf("Set affinity to core %d\n", core);
    // sched_setaffinity(gettid(), sizeof(cpu_set_t), &cpuset);
}
#endif

struct ThreadData {
    int* A;
    int* B;
    float* fpArr;
    uint32_t list_size;
    uint64_t structIterations;
};

void printCsvHeader(uint32_t* xCounts, uint32_t xLen) {
    printf("x");
    for (uint32_t testSizeIdx = 0; testSizeIdx < xLen; testSizeIdx++) {
        printf(", %d", xCounts[testSizeIdx]);
    }

    printf("\n");
}

// print results in format that excel can take
void printResultFloatArr(float* arr, uint32_t *xCounts, uint32_t xLen, uint32_t *yCounts, uint32_t yLen) {
    uint32_t testSizeCount = xLen;
    printCsvHeader(xCounts, xLen);
    for (uint32_t branchCountIdx = 0; branchCountIdx < yLen; branchCountIdx++) {
        // row header
        printf("%d", yCounts[branchCountIdx]);
        for (uint32_t testSizeIdx = 0; testSizeIdx < testSizeCount; testSizeIdx++) {
            printf(",%f", arr[branchCountIdx * testSizeCount + testSizeIdx]);
        }

        printf("\n");
    }
}

void FillPatternArr(uint32_t* pattern_arr, uint32_t list_size, uint32_t byte_increment) {
    uint32_t increment = byte_increment / sizeof(uint32_t);
    uint32_t element_count = list_size / increment;
    for (int i = 0; i < element_count; i++) {
        pattern_arr[i * increment] = i * increment;
    }

    int iter = element_count;
    while (iter > 1) {
        iter -= 1;
        int j = iter - 1 == 0 ? 0 : rand() % (iter - 1);
        uint32_t tmp = pattern_arr[iter * increment];
        pattern_arr[iter * increment] = pattern_arr[j * increment];
        pattern_arr[j * increment] = tmp;
    }
}

================================================
FILE: AsmGen/DataFiles/GccBranchHistFunction.c
================================================
// this is a partial C file that's appended into generated code

// Run a test, return the result in time (ns) per branch
// historyLen: length of random array that the test loops through
// branchCountIdx: index into array of branch counts, max determined by generated header/asm
// random: if 1, randomize test array contents. If 0, fill with zeroes
float runBranchHistTest(uint32_t historyLen, uint32_t branchCountIdx, int random) {
    struct timeval startTv, endTv;
    struct timezone startTz, endTz;
    uint32_t branchCount = branchCounts[branchCountIdx];
    uint64_t iterations = 320000000 / branchCount;
    uint64_t(*branchtestFunc)(uint64_t, uint32_t**, uint32_t) __attribute((sysv_abi)) = branchtestFuncArr[branchCountIdx];
    float onesCount = 0.0f;

    uint32_t** testArrToArr = (uint32_t**)malloc(sizeof(uint32_t*) * branchCount);
    for (int testArrIdx = 0; testArrIdx < branchCount; testArrIdx++) {
        uint32_t* testArr = (uint32_t*)malloc(sizeof(uint32_t) * historyLen);
        for (uint32_t i = 0; i < historyLen; i++) {
            testArr[i] = random ? rand() % 2 : 0;
            if (testArr[i] > 0)
            {
                onesCount += 1.0f;
            }
        }
        testArrToArr[testArrIdx] = testArr;
    }

    fprintf(stderr, "Starting test, should have %0.2f percent ones\n", onesCount / ((float)historyLen * branchCount));
    gettimeofday(&startTv, &startTz);
    uint64_t takenBranchCount = branchtestFunc(iterations, testArrToArr, historyLen);
    gettimeofday(&endTv, &endTz);
    uint64_t time_diff_ms = 1000 * (endTv.tv_sec - startTv.tv_sec) + ((endTv.tv_usec - startTv.tv_usec) / 1000);
    float latency = 1e6 * (float)time_diff_ms / (float)iterations;

    // give result in latency per branch
    latency = latency / branchCount;
    fprintf(stderr, "History length %u, branch count %u: %0.2f percent not-taken\n", historyLen, branchCount, 100 * (float)takenBranchCount / ((float)iterations * branchCount));

    for (int testArrIdx = 0; testArrIdx < branchCount; testArrIdx++) free(testArrToArr[testArrIdx]);
    free(testArrToArr);
    return latency;
}


================================================
FILE: AsmGen/DataFiles/GccIndirectBranchFunction.c
================================================
// similar but for indirect branch test
// needs indirectBranchTestFuncArr generated
// mode:
// 0 - cycle through targets
// 1 - random target selection
// 2 - jump to middle
float runIndirectBranchTest(uint32_t branchCountIdx, uint32_t targetCountIdx, uint32_t mode) {
    struct timeval startTv, endTv;
    struct timezone startTz, endTz;
    uint32_t branchCount = indirectBranchCounts[branchCountIdx];
    uint32_t targetCount = indirectBranchTargetCounts[targetCountIdx];
    uint64_t iterations = 80000000 / branchCount;
    uint64_t(*branchtestFunc)(uint64_t, uint32_t**, uint32_t, uint64_t **) __attribute((sysv_abi)) = indirectBranchTestFuncArr[branchCountIdx][targetCountIdx];

    // generate an array containing jump target indexes for every branch
    uint32_t** testArrToArr = (uint32_t**)malloc(sizeof(uint32_t*) * branchCount);
    for (int testArrIdx = 0; testArrIdx < branchCount; testArrIdx++) {
        uint32_t* testArr = (uint32_t*)malloc(sizeof(uint32_t) * targetCount);
        if (mode == 1)
            for (uint32_t i = 0; i < targetCount; i++) testArr[i] = rand() % targetCount;
        else if (mode == 0)
            for (uint32_t i = 0; i < targetCount; i++) testArr[i] = i;
        else if (mode == 2)
            for (uint32_t i = 0; i < targetCount; i++) testArr[i] = targetCount / 2;
        testArrToArr[testArrIdx] = testArr;
    }

    // each branch needs a jump table
    uint64_t** jumpTables = (uint64_t**)malloc(sizeof(uint64_t*) * branchCount);
    for (int jumpTableIdx = 0; jumpTableIdx < branchCount; jumpTableIdx++)
    {
        uint64_t* jumpTable = (uint64_t*)malloc(sizeof(uint64_t) * targetCount);
        jumpTables[jumpTableIdx] = jumpTable;
    }

    gettimeofday(&startTv, &startTz);
    // uint64_t iterations, uint32_t **arr, uint32_t arrLen, uint64_t **scratch
    branchtestFunc(iterations, testArrToArr, targetCount, jumpTables);
    gettimeofday(&endTv, &endTz);
    uint64_t time_diff_ms = 1000 * (endTv.tv_sec - startTv.tv_sec) + ((endTv.tv_usec - startTv.tv_usec) / 1000);
    float latency = 1e6 * (float)time_diff_ms / (float)iterations;

    // give result in latency per branch
    latency = latency / branchCount;

    for (int testArrIdx = 0; testArrIdx < branchCount; testArrIdx++) free(testArrToArr[testArrIdx]);
    free(testArrToArr);
    for (int jumpTableIdx = 0; jumpTableIdx < branchCount; jumpTableIdx++) free(jumpTables[jumpTableIdx]);
    free(jumpTables);
    return latency;
}


================================================
FILE: AsmGen/DataFiles/IndirectBranchTestBlock.c
================================================
// generated code will have:
// - indirectBranchTargetCounts = array containing # of targets per branch
// - indirectBranchCounts = array containing # of branches to test
// - maxIndirectBranchCount = length of ^^
// - initializeIndirectBranchFuncArr = populates

uint32_t testSizeCount = sizeof(indirectBranchTargetCounts) / sizeof(int);
initializeIndirectBranchFuncArr();
srand(time(NULL));

size_t resultSize = sizeof(float) * maxIndirectBranchCount * testSizeCount;
float* results = (float*)malloc(resultSize);
float* refResults = (float*)malloc(resultSize);
for (uint32_t branchCountIdx = 0; branchCountIdx < maxIndirectBranchCount; branchCountIdx++) {
    for (uint32_t targetCountIdx = 0; targetCountIdx < testSizeCount; targetCountIdx++) {
        uint32_t testSize = indirectBranchTargetCounts[targetCountIdx];
        uint32_t branchCount = indirectBranchCounts[branchCountIdx];
        printf("Testing branch count %d target count %d:", branchCount, testSize);
        results[branchCountIdx * testSizeCount + targetCountIdx] = runIndirectBranchTest(branchCountIdx, targetCountIdx, 0);
        refResults[branchCountIdx * testSizeCount + targetCountIdx] = runIndirectBranchTest(branchCountIdx, targetCountIdx, 2);
        printf("%f ns, reference %f ns\n",
            results[branchCountIdx * testSizeCount + targetCountIdx],
            refResults[branchCountIdx * testSizeCount + targetCountIdx]);
    }
}

printf("Indirect branch results:\n");
printResultFloatArr(results, indirectBranchTargetCounts, testSizeCount, indirectBranchCounts, maxIndirectBranchCount);
printf("Reference indirect branch results:\n");
printResultFloatArr(refResults, indirectBranchTargetCounts, testSizeCount, indirectBranchCounts, maxIndirectBranchCount);

free(results);
free(refResults);


================================================
FILE: AsmGen/DataFiles/clammicrobench.vcxproj_template
================================================
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup Label="ProjectConfigurations">
    <ProjectConfiguration Include="Debug|Win32">
      <Configuration>Debug</Configuration>
      <Platform>Win32</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Release|Win32">
      <Configuration>Release</Configuration>
      <Platform>Win32</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Debug|x64">
      <Configuration>Debug</Configuration>
      <Platform>x64</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Release|x64">
      <Configuration>Release</Configuration>
      <Platform>x64</Platform>
    </ProjectConfiguration>
  </ItemGroup>
  <PropertyGroup Label="Globals">
    <VCProjectVersion>16.0</VCProjectVersion>
    <Keyword>Win32Proj</Keyword>
    <ProjectGuid>{7e8cf2ba-57a7-4b42-b721-97e02bf9a8b8}</ProjectGuid>
    <RootNamespace>clammicrobench</RootNamespace>
    <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
  </PropertyGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseDebugLibraries>true</UseDebugLibraries>
    <PlatformToolset>v142</PlatformToolset>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseDebugLibraries>false</UseDebugLibraries>
    <PlatformToolset>v142</PlatformToolset>
    <WholeProgramOptimization>true</WholeProgramOptimization>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseDebugLibraries>true</UseDebugLibraries>
    <PlatformToolset>v142</PlatformToolset>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseDebugLibraries>false</UseDebugLibraries>
    <PlatformToolset>v142</PlatformToolset>
    <WholeProgramOptimization>true</WholeProgramOptimization>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
  <ImportGroup Label="ExtensionSettings">
  </ImportGroup>
  <ImportGroup Label="Shared">
  </ImportGroup>
  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
  </ImportGroup>
  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
  </ImportGroup>
  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
  </ImportGroup>
  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
  </ImportGroup>
  <PropertyGroup Label="UserMacros" />
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
    <LinkIncremental>true</LinkIncremental>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
    <LinkIncremental>false</LinkIncremental>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
    <LinkIncremental>true</LinkIncremental>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
    <LinkIncremental>false</LinkIncremental>
  </PropertyGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
    <ClCompile>
      <WarningLevel>Level3</WarningLevel>
      <SDLCheck>true</SDLCheck>
      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <ConformanceMode>true</ConformanceMode>
    </ClCompile>
    <Link>
      <SubSystem>Console</SubSystem>
      <GenerateDebugInformation>true</GenerateDebugInformation>
    </Link>
  </ItemDefinitionGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
    <ClCompile>
      <WarningLevel>Level3</WarningLevel>
      <FunctionLevelLinking>true</FunctionLevelLinking>
      <IntrinsicFunctions>true</IntrinsicFunctions>
      <SDLCheck>true</SDLCheck>
      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <ConformanceMode>true</ConformanceMode>
    </ClCompile>
    <Link>
      <SubSystem>Console</SubSystem>
      <EnableCOMDATFolding>true</EnableCOMDATFolding>
      <OptimizeReferences>true</OptimizeReferences>
      <GenerateDebugInformation>true</GenerateDebugInformation>
    </Link>
  </ItemDefinitionGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
    <ClCompile>
      <WarningLevel>Level3</WarningLevel>
      <SDLCheck>true</SDLCheck>
      <PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <ConformanceMode>true</ConformanceMode>
    </ClCompile>
    <Link>
      <SubSystem>Console</SubSystem>
      <GenerateDebugInformation>true</GenerateDebugInformation>
    </Link>
  </ItemDefinitionGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
    <ClCompile>
      <WarningLevel>Level3</WarningLevel>
      <FunctionLevelLinking>true</FunctionLevelLinking>
      <IntrinsicFunctions>true</IntrinsicFunctions>
      <SDLCheck>true</SDLCheck>
      <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <ConformanceMode>true</ConformanceMode>
    </ClCompile>
    <Link>
      <SubSystem>Console</SubSystem>
      <EnableCOMDATFolding>true</EnableCOMDATFolding>
      <OptimizeReferences>true</OptimizeReferences>
      <GenerateDebugInformation>true</GenerateDebugInformation>
    </Link>
  </ItemDefinitionGroup>
  <ItemGroup>
    <ClCompile Include="clammicrobench.cpp" />
  </ItemGroup>
%REPLACEWITHCUSTOMBUILD%
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
  <ImportGroup Label="ExtensionTargets">
  </ImportGroup>
</Project>


================================================
FILE: AsmGen/IUarchTest.cs
================================================
using System.Text;

namespace AsmGen
{
    public interface IUarchTest
    {
        public const string ThreadLaunchFunctionPrefix = "ThreadLaunch_";
        // enough to generate global lines, function calls, and let user pick from tests
        public string Prefix { get; }
        public string Description { get; }
        public bool DivideTimeByCount { get; }
        public bool SupportsIsa(ISA isa);

        public void GenerateAsm(StringBuilder sb, ISA isa);
        public void GenerateTestBlock(StringBuilder sb, ISA isa);
        public void GenerateAsmGlobalLines(StringBuilder sb);
        public void GenerateExternLines(StringBuilder sb);

        public enum ISA
        {
            amd64,   // 64-bit x86
            aarch64, // 64-bit arm
            mips64,   // 64-bit MIPS, for loongson
            riscv,   // 64-bit risc-v
        }
    }
}


================================================
FILE: AsmGen/Program.cs
================================================
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Threading.Tasks;

namespace AsmGen
{
    class Program
    {
        public static string DataFilesDir = "DataFiles";

        static int structTestIterations = 5000000;
        static int iterations = 100 * structTestIterations;
        static int latencyListSize = 131072 * 1024 / 4; // 128 MB

        static void Main(string[] args)
        {
            List<IUarchTest> tests = new List<IUarchTest>();
            tests.Add(new BtbTest(4, BtbTest.BranchType.Unconditional));
            tests.Add(new BtbTest(8, BtbTest.BranchType.Unconditional));
            tests.Add(new BtbTest(16, BtbTest.BranchType.Unconditional));
            tests.Add(new BtbTest(32, BtbTest.BranchType.Unconditional));
            tests.Add(new BtbTest(64, BtbTest.BranchType.Unconditional));
            tests.Add(new BtbTest(4, BtbTest.BranchType.Conditional));
            tests.Add(new BtbTest(8, BtbTest.BranchType.Conditional));
            tests.Add(new BtbTest(16, BtbTest.BranchType.Conditional));
            tests.Add(new BtbTest(32, BtbTest.BranchType.Conditional));
            tests.Add(new BranchHistoryTest());

            List<Task> tasks = new List<Task>();
            tasks.Add(Task.Run(() => GenerateCFile(tests, IUarchTest.ISA.amd64)));
            tasks.Add(Task.Run(() => GenerateCFile(tests, IUarchTest.ISA.aarch64)));
            tasks.Add(Task.Run(() => GenerateCFile(tests, IUarchTest.ISA.mips64)));
            tasks.Add(Task.Run(() => GenerateCFile(tests, IUarchTest.ISA.riscv)));

            tasks.Add(Task.Run(() => GenerateAsmFile(tests, IUarchTest.ISA.amd64)));
            tasks.Add(Task.Run(() => GenerateAsmFile(tests, IUarchTest.ISA.aarch64)));
            tasks.Add(Task.Run(() => GenerateAsmFile(tests, IUarchTest.ISA.mips64)));
            tasks.Add(Task.Run(() => GenerateAsmFile(tests, IUarchTest.ISA.riscv)));
            Task.WaitAll(tasks.ToArray());

            GenerateMakefile();
        }

        static void GenerateCFile(List<IUarchTest> tests, IUarchTest.ISA isa)
        {
            StringBuilder sb = new StringBuilder();
            sb.AppendLine("#define _GNU_SOURCE");
            sb.AppendLine("#include <stdio.h>\n#include<stdint.h>\n#include<sys/time.h>\n#include <stdlib.h>\n#include <string.h>\n#include <time.h>\n");
            sb.AppendLine("#pragma GCC diagnostic ignored \"-Wattributes\"");
            string commonFunctions = File.ReadAllText(Path.Combine(DataFilesDir, "CommonFunctions.c"));
            sb.AppendLine(commonFunctions);

            foreach (IUarchTest test in tests)
            {
                if (test.SupportsIsa(isa))
                {
                    test.GenerateExternLines(sb);
                    Console.WriteLine("Test " + test.Prefix + " supports ISA " + isa);
                }
            }

            // no indexed addressing mode on these architectures, so make sure we can do pointer
            // chasing with a single instruction
            if (isa == IUarchTest.ISA.mips64 || isa == IUarchTest.ISA.riscv)
            {
                sb.AppendLine("extern void preplatencyarr(int *arr, uint32_t list_size);");
            }

            AddCommonInitCode(sb, tests, isa);
            foreach (IUarchTest test in tests)
            {
                if (test.SupportsIsa(isa)) test.GenerateTestBlock(sb, isa);
            }

            AddCommonEndCode(sb);

            File.WriteAllText("clammicrobench_" + isa.ToString() + ".c", sb.ToString());
        }

        static void GenerateAsmFile(List<IUarchTest> tests, IUarchTest.ISA isa)
        {
            string filename = "clammicrobench_" + isa.ToString() + ".s";
            StringBuilder sb = new StringBuilder();
            sb.AppendLine(".text");

            if (isa == IUarchTest.ISA.mips64)
            {
                UarchTest.GenerateMipsPrepArrayFunction(sb);
            }
            else if (isa == IUarchTest.ISA.riscv)
            {
                UarchTest.GenerateRiscvPrepArrayFunction(sb);
            }

            File.WriteAllText(filename, sb.ToString());
            sb.Clear();

            foreach (IUarchTest test in tests)
            {
                if (test.SupportsIsa(isa))
                {
                    sb.Clear();
                    test.GenerateAsmGlobalLines(sb);
                    test.GenerateAsm(sb, isa);
                    File.AppendAllText(filename, sb.ToString());
                }
            }
        }

        static void GenerateMakefile()
        {
            StringBuilder sb = new StringBuilder();
            foreach (IUarchTest.ISA isa in Enum.GetValues(typeof(IUarchTest.ISA)))
            {
                sb.AppendLine(isa.ToString() + ":");
                if (isa == IUarchTest.ISA.aarch64)
                {
                    sb.AppendLine($"\tgcc -march=armv8.5-a+aes clammicrobench_{isa.ToString()}.c clammicrobench_{isa.ToString()}.s -o cb -static");
                    // hack for stupid compilers that need a ton of flags to do basic things
                    sb.AppendLine("android:");
                    sb.AppendLine("\tclang -march=armv8.3-a -mfpu=neon-fp-armv8 clammicrobench_aarch64.c clammicrobench_aarch64.s -o cb");
                }
                else sb.AppendLine($"\tgcc -pthread clammicrobench_{isa.ToString()}.c clammicrobench_{isa.ToString()}.s -o cb");
            }

            sb.AppendLine("win64:");
            sb.AppendLine($"\tx86_64-w64-mingw32-gcc clammicrobench_{IUarchTest.ISA.amd64.ToString()}.c clammicrobench_{IUarchTest.ISA.amd64.ToString()}.s -o cb.exe");

            sb.AppendLine("clean:");
            sb.AppendLine("\trm clammicrobench_* cb");

            File.WriteAllText("Makefile", sb.ToString());
        }

        // Adds largely ISA independent initialization code that gives tests a basic foundation,
        // like a pointer chasing array
        static void AddCommonInitCode(StringBuilder sb, List<IUarchTest> tests, IUarchTest.ISA isa)
        {
            sb.AppendLine("int main(int argc, char *argv[]) {");
            sb.AppendLine($"  uint64_t time_diff_ms, iterations = {iterations}, structIterations = {structTestIterations}, tmp;");
            sb.AppendLine("  double latency; int *A = NULL, *B = NULL; float *fpArr = NULL; char *test_name = NULL; int core_affinity = -1; int threads = 1;");
            sb.AppendLine("  uint64_t tmpsink;");
            sb.AppendLine("  uint32_t list_size = " + latencyListSize + ";");

            // print a help message based on tests available
            sb.AppendLine($"  printf(\"Usage: -test [test name] -listsize [latency list size = {latencyListSize}] -iterations [struct iterations = {structTestIterations}]\\n\");");
            sb.AppendLine("  if (argc < 2) {");
            sb.AppendLine("    printf(\"List of tests:\\n\");");
            foreach (IUarchTest test in tests)
            {
                if (test.SupportsIsa(isa)) sb.AppendLine($"    printf(\"  {test.Prefix} - {test.Description}\\n\");");
            }

            // args provided. parse them and run test
            sb.AppendLine("  } else {");

            // args handling
            sb.AppendLine("    for (int argIdx = 1; argIdx < argc; argIdx++) {");
            sb.AppendLine("      if (*(argv[argIdx]) == '-') { char *arg = argv[argIdx] + 1;");
            sb.AppendLine("        if (strncmp(arg, \"test\", 4) == 0) { argIdx++; test_name = argv[argIdx]; }");
            sb.AppendLine("        if (strncmp(arg, \"iterations\", 10) == 0) { argIdx++; iterations = 100 * atoi(argv[argIdx]); }");
            sb.AppendLine("        if (strncmp(arg, \"listsize\", 8) == 0) { argIdx++; list_size = atoi(argv[argIdx]); }");
            sb.AppendLine("        if (strncmp(arg, \"affinity\", 8) == 0) { argIdx++; core_affinity = atoi(argv[argIdx]); }");
            sb.AppendLine("        if (strncmp(arg, \"threads\", 7) == 0) { argIdx++; threads = atoi(argv[argIdx]); }");
            sb.AppendLine("      }"); // end -arg handling if
            sb.AppendLine("    }"); // end args handling for loop

            sb.AppendLine("    if (test_name == NULL) { fprintf(stderr, \"No test specified\\n\"); return 0; }");

            // Optional affinity setting for certain troublesome platforms
            // don't need a version that uses Windows affinity APIs because Windows platforms never have this issue
            sb.AppendLine("#ifndef __MINGW32__");
            sb.AppendLine("  if (core_affinity != -1) setAffinity(core_affinity);");
            sb.AppendLine("#endif");

            // Generate array for pointer chasing unless we're doing a BTB test
            sb.AppendLine("  if (argc == 1 || argc > 1 && strncmp(test_name, \"btb\", 3) != 0) {");
            GenerateLatencyTestArray(sb);
            sb.AppendLine("  }"); // end of ptr chasing array generation
            sb.AppendLine("  struct timeval startTv, endTv;");
            sb.AppendLine("  struct timezone startTz, endTz;");
        }


        static void AddCommonEndCode(StringBuilder sb)
        {
            sb.AppendLine("  free(A); free(B); free(fpArr);");
            sb.AppendLine("  }"); // end else
            sb.AppendLine("  return 0; }");
        }

        static void GenerateLatencyTestArray(StringBuilder sb)
        {
            // Fill list to create random access pattern
            sb.AppendLine("  A = (int*)malloc(sizeof(int) * list_size);");
            sb.AppendLine("  srand(time(NULL));");
            sb.AppendLine("  FillPatternArr(A, list_size, 64);\n");

            sb.AppendLine("#ifdef _WIN32");
            sb.AppendLine("  B = (int*)_aligned_malloc(sizeof(int) * list_size, 64);\n");
            sb.AppendLine("#else");
            sb.AppendLine("  posix_memalign((void **)&B, 64, sizeof(int) * list_size);\n");
            sb.AppendLine("#endif");
            sb.AppendLine("  for (int i = 0; i < list_size; i++) { B[i] = i; }\n");
            sb.AppendLine("#ifdef _WIN32");
            sb.AppendLine("  fpArr = (float*)_aligned_malloc(sizeof(float) * list_size, 64);\n");
            sb.AppendLine("#else");
            sb.AppendLine("  posix_memalign((void **)&fpArr, 64, sizeof(float) * list_size);");
            sb.AppendLine("#endif");
            sb.AppendLine("  for (int i = 0;i < list_size; i++) { fpArr[i] = i + .1; }\n");
        }
    }
}


================================================
FILE: AsmGen/Properties/launchSettings.json
================================================
{
  "profiles": {
    "AsmGen": {
      "commandName": "Project",
      "commandLineArgs": "autocopy"
    }
  }
}


================================================
FILE: AsmGen/README.md
================================================
# Microbenchmark Generator
C# project to generate C and assembly for CPU structure size benchmarks that use different code for each data point, making them
impractical to write by hand. For more details on methodology for out-of-order structure size measurement, see https://blog.stuffedcow.net/2013/05/measuring-rob-capacity/

First, go to Program.cs and set the expected sizes for the structures you want to measure. The constructor for each test generally has the same (low, high, step) format. For example if you anticipate ROB capacity will be between 128 and 512 entries, you can do `tests.Add(new RobTest(128, 1, 512))`

# Building

Compile the project and run AsmGen.exe. That gives several output files. Compilation for Linux:
`gcc clammicrobench.c clammicrobench_x86.s -o clammicrobench` for x86_64
`gcc clammicrobench.c clammicrobench_arm.s -o clammicrobench` for aarch64
`aarch64-linux-gnu-gcc clammicrobench.c clammicrobench_arm.s -o clammicrobench` to cross compile for aarch64 (for example from a fast desktop)

For Windows, run `AsmGen.exe autocopy`. That copies generated files to the /clammicrobench directory, assuming it's run from the default VS output location. Then, open /clammicrobench/clammicrobench.sln and build. You need nasm in your path for that, as covered on README.md at repo root.

The indirect branch test can take a while to build with nasm, so you might want to reduce the branch and target counts for that. Or just keep it commented out.

# Running
Generally, the syntax is `clammicrobench -test [test name] -listsize [list size for latency test] -iterations [iteration count]`. The last two parameters are optional.

# Tests

Running the program without parameters will spit out a list of tests and brief descriptions. Most are structure size tests. Instructions that consume certain core resources are placed between two pointer chasing loads. Once the two cache misses can't overlap, the structure being tested is full. Some tests, especially those measuring scheduler capacity, will hit a mix of instructions to see whether capacity is shared across different categories of instructions. 

Alongside structure size tests, AsmGen is a convenient place to put other microbenchmarks that involve generating tons of code. There are several branch predictor tests:
- btb16Unconditional, etc: Creates a chain of taken branches in a loop to measure taken branch latency. Useful for showing BTB size and speed. Different distances between branches are useful because branch predictors sometimes have dtrouble tracking branches that are too close together.
- btb16Conditional: Same as above but with always-taken conditional branches
- branchhist - Branch history test: Generates branches that are taken or not taken in some random pattern, then increases the length of that pattern and the number of branches. Each branch is given its own pattern. This test thus tries to see how long of a pattern the branch predictor can track before getting a lot of mispredicts.
- indirectbranch - Indirect branch prediction test: Varies the number of branch targets and branches to see how many total targets the indirect branch predictor can track
- returnstack - Tests return prediction with a nested calls of varying depths. When the return stack overflows, you'll see an increase in time per call/return pair.


================================================
FILE: AsmGen/UarchTest.cs
================================================
using System.Runtime.Serialization;
using System.Text;

namespace AsmGen
{
    public abstract class UarchTest : IUarchTest
    {
        public string Prefix { get; set; }

        public string Description { get; set; }

        public int[] Counts;

        public string FunctionDefinitionParameters { get; set; }

        public string GetFunctionCallParameters { get; set; }

        public bool DivideTimeByCount { get; set; }

        public abstract bool SupportsIsa(IUarchTest.ISA isa);
        public abstract void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa);

        public void GenerateAsmGlobalLines(StringBuilder sb)
        {
            for (int i = 0; i < Counts.Length; i++)
                sb.AppendLine(".global " + Prefix + Counts[i]);
        }

        public void GenerateExternLines(StringBuilder sb)
        {
            for (int i = 0; i < Counts.Length; i++)
            {
                sb.AppendLine("extern uint64_t " + Prefix + Counts[i] + $"({FunctionDefinitionParameters}) __attribute((sysv_abi));");

                // Function that can be launched in a pthread
                sb.AppendLine($"void *{IUarchTest.ThreadLaunchFunctionPrefix}{Prefix}{Counts[i]}(void *pa)");
                sb.AppendLine("{");
                sb.AppendLine("    struct ThreadData *td = (struct ThreadData *)pa;");
                sb.AppendLine("    int *A = td->A;");
                sb.AppendLine("    int *B = td->B;");
                sb.AppendLine("    float *fpArr = td->fpArr;");
                sb.AppendLine("    uint32_t list_size = td->list_size;");
                sb.AppendLine("    int structIterations = td->structIterations;");
                sb.AppendLine("    " + Prefix + Counts[i] + $"({GetFunctionCallParameters});");
                sb.AppendLine("    return NULL;");
                sb.AppendLine("}");
            }
        }

        public void GenerateTestBlock(StringBuilder sb, IUarchTest.ISA isa)
        {
            sb.AppendLine("  if (argc > 1 && strcmp(test_name, \"" + Prefix + "\") == 0) {");
            sb.AppendLine("    printf(\"" + Description + ":\\n\");");

            if (isa == IUarchTest.ISA.mips64 || isa == IUarchTest.ISA.riscv)
            {
                sb.AppendLine("  if (argc == 1 || argc > 1 && strncmp(test_name, \"btb\", 3) != 0) {");
                sb.AppendLine("preplatencyarr(A, list_size);");
                sb.AppendLine("  }");
            }

            for (int i = 0; i < Counts.Length; i++)
            {
                // use more iterations (iterations = structIterations * 100) and divide iteration count by tested-thing count
                // for certain tests like call stack depth
                if (DivideTimeByCount)
                {
                    sb.AppendLine("    tmp = structIterations;");
                    sb.AppendLine("    structIterations = iterations / " + Counts[i] + ";");
                }

                sb.AppendLine("    gettimeofday(&startTv, &startTz);");
                sb.AppendLine("#ifndef __MINGW32__");
                sb.AppendLine("    if (threads > 1) {");
                sb.AppendLine("        struct ThreadData testThreadData;");
                sb.AppendLine("        pthread_t *testThreads = (pthread_t *)malloc(threads * sizeof(pthread_t));");
                sb.AppendLine("        testThreadData.A = A;");
                sb.AppendLine("        testThreadData.B = B;");
                sb.AppendLine("        testThreadData.fpArr = fpArr;");
                sb.AppendLine("        testThreadData.list_size = list_size;");
                sb.AppendLine("        testThreadData.structIterations = structIterations;");
                sb.AppendLine("        for (int threadIdx = 0; threadIdx < threads; threadIdx++) {");
                sb.AppendLine($"            pthread_create(testThreads + threadIdx, NULL, {IUarchTest.ThreadLaunchFunctionPrefix}{Prefix}{Counts[i]}, &testThreadData);");
                sb.AppendLine("        }");
                sb.AppendLine("        for (int threadIdx = 0; threadIdx < threads; threadIdx++) {");
                sb.AppendLine("             pthread_join(testThreads[threadIdx], NULL);");
                sb.AppendLine("        }");
                sb.AppendLine("        free(testThreads);");
                // launch threads
                sb.AppendLine("    } else ");
                sb.AppendLine("        " + Prefix + Counts[i] + $"({GetFunctionCallParameters});");
                sb.AppendLine("#else");
                sb.AppendLine("    " + Prefix + Counts[i] + $"({GetFunctionCallParameters});");
                sb.AppendLine("#endif");
                sb.AppendLine("    gettimeofday(&endTv, &endTz);");
                sb.AppendLine("    time_diff_ms = 1000 * (endTv.tv_sec - startTv.tv_sec) + ((endTv.tv_usec - startTv.tv_usec) / 1000);");
                //sb.AppendLine("    fprintf(stderr, \"%lu ms elapsed, %lu iter\\n\", time_diff_ms, structIterations);");
                if (DivideTimeByCount)
                    sb.AppendLine("    latency = 1e6 * (float)time_diff_ms / (float)(iterations);");
                else
                    sb.AppendLine("    latency = 1e6 * (float)time_diff_ms / (float)(structIterations);");
                sb.AppendLine("    printf(\"" + Counts[i] + ",%f\\n\", latency);\n");

                if (DivideTimeByCount)
                {
                    sb.AppendLine("    structIterations = tmp;");
                }
            }

            sb.AppendLine("  }\n");
        }

        /// <summary>
        /// MIPS doesn't have an indexed load instruction which means we'd have to use an
        /// add+shift (extra two instructions), which would complicate measurements
        /// So screw around in order to use direct addressing
        /// </summary>
        /// <param name="sb"></param>
        public static void GenerateMipsPrepArrayFunction(StringBuilder sb)
        {
            // r4 = ptr to arr, r5 = arr len, in 32-bit elements
            sb.AppendLine(".global preplatencyarr");
            sb.AppendLine("preplatencyarr:");
            sb.AppendLine("  xor $r12, $r12, $r12");
            sb.AppendLine("  xor $r13, $r13, $r13");
            sb.AppendLine("  xor $r14, $r14, $r14");
            sb.AppendLine("  xor $r15, $r15, $r15"); // array index
            sb.AppendLine("  addi.d $r14, $r14, 1");
            sb.AppendLine("preplatencyarr_loop:");
            sb.AppendLine("  alsl.d $r12, $r15, $r0, 0x3"); // shift by 3 = multiply by 8 for 64-bit
            sb.AppendLine("  add.d $r12, $r4, $r12"); // add loaded value to base address
            sb.AppendLine(" ld.d $r13, $r12, 0");
            sb.AppendLine("  alsl.d $r13, $r13, $r0, 0x2"); // address calculation for loaded index. this is in 32-bit values
            sb.AppendLine("  add.d $r13, $r4, $r13");
            sb.AppendLine("  st.d $r13, $r12, 0");  // save calculated address
            sb.AppendLine("  add.d $r15, $r15, $r14");
            sb.AppendLine("  alsl.d $r16, $r15, $r0, 0x1"); // muliply 64-bit index by 2 to prevent out of bounds for 32-bit list size count
            sb.AppendLine("  bne $r16, $r5, preplatencyarr_loop"); // while idx != len
            sb.AppendLine("  jr $r1");
        }

        public static void GenerateRiscvPrepArrayFunction(StringBuilder sb)
        {
            sb.AppendLine(".global preplatencyarr");
            sb.AppendLine("preplatencyarr:");
            sb.AppendLine("  li x7, 0");
            sb.AppendLine("  mv x5, x10");
            sb.AppendLine("preplatencyarr_loop:");
            sb.AppendLine("  ld x28, (x5)");
            sb.AppendLine("  slli x28, x28, 2"); // index specified in 32-bit values
            sb.AppendLine("  add x28, x28, x10");
            sb.AppendLine("  sd x28, (x5)");
            sb.AppendLine("  addi x5, x5, 8"); // next element
            sb.AppendLine("  addi x7, x7, 2"); // list size is given in 32-bit elements
            sb.AppendLine("  blt x7, x11, preplatencyarr_loop");
            sb.AppendLine("  ret");
        }
    }
}


================================================
FILE: AsmGen/UarchTestHelpers.cs
================================================
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace AsmGen
{
    public static class UarchTestHelpers
    {
        public static int[] GenerateCountArray(int low, int high, int step)
        {
            List<int> countList = new List<int>();
            for (int i = low; i <= high; i += step)
            {
                countList.Add(i);
            }

            return countList.ToArray();
        }

        public static void GenerateNasmGlobalLines(StringBuilder sb, UarchTest test)
        {
            int[] counts = test.Counts;
            for (int i = 0; i < counts.Length; i++)
                sb.AppendLine("global " + test.Prefix + counts[i]);
        }

        public static void GenerateAsmGlobalLines(StringBuilder sb, UarchTest test)
        {
            int[] counts = test.Counts;
            for (int i = 0; i < counts.Length; i++)
                sb.AppendLine(".global " + test.Prefix + counts[i]);
        }

        public static void GenerateExternLines(StringBuilder sb, UarchTest test)
        {
            int[] counts = test.Counts;
            for (int i = 0; i < counts.Length; i++)
                sb.AppendLine("extern uint64_t " + test.Prefix + counts[i] + $"({test.FunctionDefinitionParameters}) __attribute((sysv_abi));"); ;
        }

        public static void GenerateVsExternLines(StringBuilder sb, UarchTest test)
        {
            int[] counts = test.Counts;
            for (int i = 0; i < counts.Length; i++)
                sb.AppendLine("extern \"C\" uint64_t " + test.Prefix + counts[i] + $"({test.FunctionDefinitionParameters});");
        }

        /// <summary>
        /// Generates test functions in assembly, with filler instructions between two divs
        /// Args are put into rcx, rdx, r8 (in that order) to match Windows calling convention
        /// </summary>
        /// <param name="sb">StringBuilder to append to</param>
        /// <param name="counts">Sizes to test the structure at</param>
        /// <param name="funcNamePrefix">Function name prefix</param>
        /// <param name="fillerInstrs1">Filler instructions after first ptr chasing load</param>
        /// <param name="fillerInstrs2">Filler instructions after second ptr chasing load</param>
        /// <param name="includePtrChasingLoads">If true, count pointer chasing loads as consuming the tested resource
        /// (i.e. ptr chasing loads consume a ROB and integer RF slot) </param>
        /// <param name="initInstrs">Any extra initialization instructions</param>
        public static void GenerateX86AsmDivStructureTestFuncs(StringBuilder sb, int[] counts, string funcNamePrefix, string[] fillerInstrs1, string[] fillerInstrs2, bool includePtrChasingLoads = true, string initInstrs = null)
        {
            for (int i = 0; i < counts.Length; i++)
            {
                string funcName = funcNamePrefix + counts[i];
                sb.AppendLine("\n" + funcName + ":");
                sb.AppendLine("  push %rsi");
                sb.AppendLine("  push %rdi");
                sb.AppendLine("  push %r15");
                sb.AppendLine("  push %r14");
                sb.AppendLine("  push %r13");
                sb.AppendLine("  push %r12");
                sb.AppendLine("  push %r11");
                sb.AppendLine("  push %r8");
                sb.AppendLine("  push %r9");
                sb.AppendLine("  push %rcx");
                sb.AppendLine("  push %rdx");

                // arguments are in RDI, RSI, RDX, RCX, R8, and R9
                // move them into familiar windows argument regs (rcx, rdx, r8)
                sb.AppendLine("  mov %rcx, %r9"); // r9 <- rcx
                sb.AppendLine("  mov %rdx, %r8"); // r8 <- rdx
                sb.AppendLine("  mov %rsi, %rdx"); // rdx <- rsi
                sb.AppendLine("  mov %rdi, %rcx"); // rcx <- rdi

                sb.AppendLine("  xor %r15, %r15");
                sb.AppendLine("  mov $0x10, %r14");
                sb.AppendLine("  mov $0x20, %r13");
                sb.AppendLine("  mov $0x30, %r12");
                sb.AppendLine("  mov $0x40, %r11");

                if (initInstrs != null) sb.AppendLine(initInstrs);

                sb.AppendLine("  mov %rdx, %rdi");
                sb.AppendLine("  mov %rdx, %rsi");
                sb.AppendLine("\n" + funcName + "start:");

                // keep dividing list size by itself
                sb.AppendLine("  xor %rdx, %rdx");
                sb.AppendLine("  mov %rdi, %rax");
                sb.AppendLine("  idiv %rsi");
                sb.AppendLine("  xor %rdx, %rdx");
                sb.AppendLine("  idiv %rsi");
                sb.AppendLine("  xor %rdx, %rdx");
                sb.AppendLine("  idiv %rsi");
                sb.AppendLine("  xor %rdx, %rdx");
                sb.AppendLine("  idiv %rsi");
                sb.AppendLine("  xor %rdx, %rdx");
                sb.AppendLine("  idiv %rsi");
                sb.AppendLine("  xor %rdx, %rdx");
                sb.AppendLine("  idiv %rsi");
                sb.AppendLine("  sub %rax, %rsi");
                sb.AppendLine("  inc %rsi");

                // rdx is the remainder, rax is the quotient
                int fillerInstrCount = includePtrChasingLoads ? counts[i] - 2 : counts[i];
                for (int fillerIdx = 0, instrIdx = 0; fillerIdx < fillerInstrCount; fillerIdx++)
                {
                    sb.AppendLine(fillerInstrs1[instrIdx]);
                    instrIdx = (instrIdx + 1) % fillerInstrs1.Length;
                }

                sb.AppendLine("  xor %rdx, %rdx");
                sb.AppendLine("  mov %rsi, %rax");
                sb.AppendLine("  idiv %rdi");
                sb.AppendLine("  xor %rdx, %rdx");
                sb.AppendLine("  idiv %rdi");
                sb.AppendLine("  xor %rdx, %rdx");
                sb.AppendLine("  idiv %rdi");
                sb.AppendLine("  xor %rdx, %rdx");
                sb.AppendLine("  idiv %rdi");
                sb.AppendLine("  xor %rdx, %rdx");
                sb.AppendLine("  idiv %rdi");
                sb.AppendLine("  xor %rdx, %rdx");
                sb.AppendLine("  idiv %rdi");
                sb.AppendLine("  sub %rax, %rdi");
                sb.AppendLine("  inc %rdi");
                for (int fillerIdx = 0, instrIdx = 0; fillerIdx < fillerInstrCount; fillerIdx++)
                {
                    sb.AppendLine(fillerInstrs2[instrIdx]);
                    instrIdx = (instrIdx + 1) % fillerInstrs2.Length;
                }

                sb.AppendLine("  dec %rcx");
                sb.AppendLine("  jne " + funcName + "start");
                sb.AppendLine("  pop %rdx");
                sb.AppendLine("  pop %rcx");
                sb.AppendLine("  pop %r9");
                sb.AppendLine("  pop %r8");
                sb.AppendLine("  pop %r11");
                sb.AppendLine("  pop %r12");
                sb.AppendLine("  pop %r13");
                sb.AppendLine("  pop %r14");
                sb.AppendLine("  pop %r15");
                sb.AppendLine("  pop %rdi");
                sb.AppendLine("  pop %rsi");
                sb.AppendLine("  ret\n\n");
            }
        }

        public static void GenerateX86AsmDivNsqTestFuncs(StringBuilder sb,
            int maxSize,
            int[] counts,
            string funcNamePrefix,
            string[] depInstrs,
            string[] indepInstrs,
            bool divsInSq = false,
            string initInstrs = null)
        {
            for (int i = 0; i < counts.Length; i++)
            {
                string funcName = funcNamePrefix + counts[i];
                sb.AppendLine("\n" + funcName + ":");
                sb.AppendLine("  push %rsi");
                sb.AppendLine("  push %rdi");
                sb.AppendLine("  push %r15");
                sb.AppendLine("  push %r14");
                sb.AppendLine("  push %r13");
                sb.AppendLine("  push %r12");
                sb.AppendLine("  push %r11");
                sb.AppendLine("  push %r8");
                sb.AppendLine("  push %rcx");
                sb.AppendLine("  push %rdx");

                // arguments are in RDI, RSI, RDX, RCX, R8, and R9
                // move them into familiar windows argument regs (rcx, rdx, r8)
                sb.AppendLine("  mov %rdx, %r8"); // r8 <- rdx
                sb.AppendLine("  mov %rsi, %rdx"); // rdx <- rsi
                sb.AppendLine("  mov %rdi, %rcx"); // rcx <- rdi

                sb.AppendLine("  xor %r15, %r15");
                sb.AppendLine("  mov $0x10, %r14");
                sb.AppendLine("  mov $0x20, %r13");
                sb.AppendLine("  mov $0x30, %r12");
                sb.AppendLine("  mov $0x40, %r11");

                if (initInstrs != null) sb.AppendLine(initInstrs);

                sb.AppendLine("  mov %rdx, %rdi");
                sb.AppendLine("  mov %rdx, %rsi");
                sb.AppendLine("\n" + funcName + "start:");

                // keep dividing list size by itself
                sb.AppendLine("  xor %rdx, %rdx");
                sb.AppendLine("  mov %rdi, %rax");  // divide rdi by rsi
                sb.AppendLine("  idiv %rsi");
                sb.AppendLine("  xor %rdx, %rdx");
                sb.AppendLine("  idiv %rsi");
                sb.AppendLine("  xor %rdx, %rdx");
                sb.AppendLine("  idiv %rsi");
                sb.AppendLine("  xor %rdx, %rdx");
                sb.AppendLine("  idiv %rsi");
                sb.AppendLine("  xor %rdx, %rdx");
                sb.AppendLine("  idiv %rsi");
                sb.AppendLine("  xor %rdx, %rdx");
                sb.AppendLine("  idiv %rsi");
                sb.AppendLine("  sub %rax, %rsi");
                sb.AppendLine("  inc %rsi");

                // rdx is the remainder, rax is the quotient
                int fillerInstrCount = divsInSq ? counts[i] - 6 : counts[i];
                for (int fillerIdx = 0, depInstrIdx = 0, indepInstrIdx = 0; fillerIdx < maxSize; fillerIdx++)
                {
                    if (fillerIdx < fillerInstrCount)
                    {
                        sb.AppendLine(depInstrs[depInstrIdx]);
                        depInstrIdx = (depInstrIdx + 1) % depInstrs.Length;
                    }
                    else
                    {
                        sb.AppendLine(indepInstrs[indepInstrIdx]);
                        indepInstrIdx = (indepInstrIdx + 1) % indepInstrs.Length;
                    }
                }

                sb.AppendLine("  xor %rdx, %rdx");
                sb.AppendLine("  mov %rsi, %rax");  // divide rsi by rdi
                sb.AppendLine("  idiv %rdi");
                sb.AppendLine("  xor %rdx, %rdx");
                sb.AppendLine("  idiv %rdi");
                sb.AppendLine("  xor %rdx, %rdx");
                sb.AppendLine("  idiv %rdi");
                sb.AppendLine("  xor %rdx, %rdx");
                sb.AppendLine("  idiv %rdi");
                sb.AppendLine("  xor %rdx, %rdx");
                sb.AppendLine("  idiv %rdi");
                sb.AppendLine("  xor %rdx, %rdx");
                sb.AppendLine("  idiv %rdi");
                sb.AppendLine("  sub %rax, %rdi");
                sb.AppendLine("  inc %rdi");

                for (int fillerIdx = 0, depInstrIdx = 0, indepInstrIdx = 0; fillerIdx < maxSize; fillerIdx++)
                {
                    if (fillerIdx < fillerInstrCount)
                    {
                        sb.AppendLine(depInstrs[depInstrIdx]);
                        depInstrIdx = (depInstrIdx + 1) % depInstrs.Length;
                    }
                    else
                    {
                        sb.AppendLine(indepInstrs[indepInstrIdx]);
                        indepInstrIdx = (indepInstrIdx + 1) % indepInstrs.Length;
                    }
                }

                sb.AppendLine("  dec %rcx");
                sb.AppendLine("  jne " + funcName + "start");
                sb.AppendLine("  pop %rdx");
                sb.AppendLine("  pop %rcx");
                sb.AppendLine("  pop %r8");
                sb.AppendLine("  pop %r11");
                sb.AppendLine("  pop %r12");
                sb.AppendLine("  pop %r13");
                sb.AppendLine("  pop %r14");
                sb.AppendLine("  pop %r15");
                sb.AppendLine("  pop %rdi");
                sb.AppendLine("  pop %rsi");
                sb.AppendLine("  ret\n\n");
            }
        }

        public static void GenerateX86AsmStructureTestFuncs(StringBuilder sb,
            int[] counts,
            string funcNamePrefix,
            string[] fillerInstrs1,
            string[] fillerInstrs2,
            bool includePtrChasingLoads = true,
            string initInstrs = null,
            string postLoadInstrs1 = null,
            string postLoadInstrs2 = null,
            bool lfence = true,
            string cleanupInstrs = null)
        {
            for (int i = 0; i < counts.Length; i++)
            {
                string funcName = funcNamePrefix + counts[i];
                sb.AppendLine("\n" + funcName + ":");
                sb.AppendLine("  push %rsi");
                sb.AppendLine("  push %rdi");
                sb.AppendLine("  push %r15");
                sb.AppendLine("  push %r14");
                sb.AppendLine("  push %r13");
                sb.AppendLine("  push %r12");
                sb.AppendLine("  push %r11");
                sb.AppendLine("  push %r8");
                sb.AppendLine("  push %rcx");
                sb.AppendLine("  push %rdx");

                // arguments are in RDI, RSI, RDX, RCX, R8, and R9
                // move them into familiar windows argument regs (rcx, rdx, r8)
                sb.AppendLine("  mov %rdx, %r8"); // r8 <- rdx
                sb.AppendLine("  mov %rsi, %rdx"); // rdx <- rsi
                sb.AppendLine("  mov %rdi, %rcx"); // rcx <- rdi

                sb.AppendLine("  xor %r15, %r15");
                sb.AppendLine("  mov $0x1, %r14");
                sb.AppendLine("  mov $0x2, %r13");
                sb.AppendLine("  mov $0x3, %r12");
                sb.AppendLine("  mov $0x4, %r11");

                if (initInstrs != null) sb.AppendLine(initInstrs);

                sb.AppendLine("  xor %rdi, %rdi");
                sb.AppendLine("  mov $0x40, %esi");
                sb.AppendLine("  mov (%rdx,%rdi,4), %edi");
                sb.AppendLine("  mov (%rdx,%rsi,4), %esi");
                sb.AppendLine("\n" + funcName + "start:");
                sb.AppendLine("  mov (%rdx,%rdi,4), %edi");
                if (postLoadInstrs1 != null) sb.AppendLine(postLoadInstrs1);
                int fillerInstrCount = includePtrChasingLoads ? counts[i] - 2 : counts[i];
                for (int fillerIdx = 0, instrIdx = 0; fillerIdx < fillerInstrCount; fillerIdx++)
                {
                    sb.AppendLine(fillerInstrs1[instrIdx]);
                    instrIdx = (instrIdx + 1) % fillerInstrs1.Length;
                }

                sb.AppendLine("  mov (%rdx,%rsi,4), %esi");
                if (lfence) sb.AppendLine("lfence");
                else
                {
                    if (postLoadInstrs2 != null) sb.AppendLine(postLoadInstrs2);
                    for (int fillerIdx = 0, instrIdx = 0; fillerIdx < fillerInstrCount; fillerIdx++)
                    {
                        sb.AppendLine(fillerInstrs2[instrIdx]);
                        instrIdx = (instrIdx + 1) % fillerInstrs2.Length;
                    }
                }

                sb.AppendLine("  dec %rcx");
                sb.AppendLine("  jne " + funcName + "start");
                if (cleanupInstrs != null) sb.AppendLine(cleanupInstrs);
                sb.AppendLine("  pop %rdx");
                sb.AppendLine("  pop %rcx");
                sb.AppendLine("  pop %r8");
                sb.AppendLine("  pop %r11");
                sb.AppendLine("  pop %r12");
                sb.AppendLine("  pop %r13");
                sb.AppendLine("  pop %r14");
                sb.AppendLine("  pop %r15");
                sb.AppendLine("  pop %rdi");
                sb.AppendLine("  pop %rsi");
                sb.AppendLine("  ret\n\n");
            }
        }

        /// <summary>
        /// Generate test functions to see how big a scheduler is, without a NSQ
        /// Dependent ops are followed by independent ops, total op count = max
        /// If number of dependent ops is greater than NSQ size, indep ops can't be executed and
        /// there will be a dispatch stall
        /// </summary>
        /// <param name="sb">Stringbuilder to append to</param>
        /// <param name="totalOps">number of ops between dependent loads. must be less than RF size but greater than SQ+NSQ size</param>
        /// <param name="counts">array of data points to test (SQ sizes in this case)</param>
        /// <param name="funcNamePrefix">function name prefix</param>
        /// <param name="dependentInstrs"></param>
        /// <param name="indepInstrs"></param>
        /// <param name="ptrChasingLoadsInSq">Do ptr chasing loads occupy entries in the SQ being measured?</param>
        public static void GenerateX86AsmNsqTestFuncs(StringBuilder sb,
            int totalOps,
            int[] counts,
            string funcNamePrefix,
            string[] dependentInstrs,
            string[] indepInstrs,
            bool ptrChasingLoadsInSq = false,
            string initInstrs = null,
            string postLoadInstrs = null)
        {
            for (int i = 0; i < counts.Length; i++)
            {
                string funcName = funcNamePrefix + counts[i];
                sb.AppendLine("\n" + funcName + ":");
                sb.AppendLine("  push %rsi");
                sb.AppendLine("  push %rdi");
                sb.AppendLine("  push %r15");
                sb.AppendLine("  push %r14");
                sb.AppendLine("  push %r13");
                sb.AppendLine("  push %r12");
                sb.AppendLine("  push %r11");
                sb.AppendLine("  push %r8");
                sb.AppendLine("  push %rcx");
                sb.AppendLine("  push %rdx");

                // arguments are in RDI, RSI, RDX, RCX, R8, and R9
                // move them into familiar windows argument regs (rcx, rdx, r8)
                sb.AppendLine("  mov %rdx, %r8"); // r8 <- rdx
                sb.AppendLine("  mov %rsi, %rdx"); // rdx <- rsi
                sb.AppendLine("  mov %rdi, %rcx"); // rcx <- rdi

                sb.AppendLine("  xor %r15, %r15");
                sb.AppendLine("  mov $0x1, %r14");
                sb.AppendLine("  mov $0x2, %r13");
                sb.AppendLine("  mov $0x3, %r12");
                sb.AppendLine("  mov $0x4, %r11");

                if (initInstrs != null) sb.AppendLine(initInstrs);

                sb.AppendLine("  xor %rdi, %rdi");
                sb.AppendLine("  mov $0x40, %esi");
                sb.AppendLine("  mov (%rdx,%rdi,4), %edi");
                sb.AppendLine("  mov (%rdx,%rsi,4), %esi");
                sb.AppendLine("\n" + funcName + "start:");
                sb.AppendLine("  mov (%rdx,%rdi,4), %edi");
                if (postLoadInstrs != null) sb.AppendLine(postLoadInstrs);
                int sqInstrs = ptrChasingLoadsInSq ? counts[i] - 2 : counts[i];
                for (int fillerIdx = 0, depInstrIdx = 0, indepInstrIdx = 0; fillerIdx < totalOps; fillerIdx++)
                {
                    if (fillerIdx < sqInstrs)
                    {
                        sb.AppendLine(dependentInstrs[depInstrIdx]);
                        depInstrIdx = (depInstrIdx + 1) % dependentInstrs.Length;
                    }
                    else
                    {
                        sb.AppendLine(indepInstrs[indepInstrIdx]);
                        indepInstrIdx = (indepInstrIdx + 1) % indepInstrs.Length;
                    }
                }

                sb.AppendLine("  mov (%rdx,%rsi,4), %esi");
                sb.AppendLine("  lfence");
                sb.AppendLine("  dec %rcx");
                sb.AppendLine("  jne " + funcName + "start");
                sb.AppendLine("  pop %rdx");
                sb.AppendLine("  pop %rcx");
                sb.AppendLine("  pop %r8");
                sb.AppendLine("  pop %r11");
                sb.AppendLine("  pop %r12");
                sb.AppendLine("  pop %r13");
                sb.AppendLine("  pop %r14");
                sb.AppendLine("  pop %r15");
                sb.AppendLine("  pop %rdi");
                sb.AppendLine("  pop %rsi");
                sb.AppendLine("  ret\n\n");
            }
        }

        /// <summary>
        /// Generate test functions for testing integer scheduler capacity
        /// R15's value is dependent on the pointer chasing load results
        /// </summary>
        /// <param name="sb"></param>
        /// <param name="counts"></param>
        /// <param name="funcNamePrefix"></param>
        /// <param name="fillerInstrs1"></param>
        /// <param name="fillerInstrs2"></param>
        /// <param name="divs"></param>
        /// <param name="initInstrs"></param>
        public static void GenerateX86AsmIntSchedTestFuncs(StringBuilder sb, int[] counts, string funcNamePrefix, string[] fillerInstrs1, string[] fillerInstrs2, bool divs = true, string initInstrs = null)
        {
            for (int i = 0; i < counts.Length; i++)
            {
                string funcName = funcNamePrefix + counts[i];
                sb.AppendLine("\n" + funcName + ":");
                sb.AppendLine("  push %rsi");
                sb.AppendLine("  push %rdi");
                sb.AppendLine("  push %r15");
                sb.AppendLine("  push %r14");
                sb.AppendLine("  push %r13");
                sb.AppendLine("  push %r12");
                sb.AppendLine("  push %r11");
                sb.AppendLine("  push %r8");
                sb.AppendLine("  push %rcx");
                sb.AppendLine("  push %rdx");

                // arguments are in RDI, RSI, RDX, RCX, R8, and R9
                // move them into familiar windows argument regs (rcx, rdx, r8)
                sb.AppendLine("  mov %rdx, %r8"); // r8 <- rdx
                sb.AppendLine("  mov %rsi, %rdx"); // rdx <- rsi
                sb.AppendLine("  mov %rdi, %rcx"); // rcx <- rdi

                sb.AppendLine("  xor %r15, %r15");
                sb.AppendLine("  mov $0x1, %r14");
                sb.AppendLine("  mov $0x2, %r13");
                sb.AppendLine("  mov $0x3, %r12");
                sb.AppendLine("  mov $0x4, %r11");

                if (initInstrs != null) sb.AppendLine(initInstrs);

                sb.AppendLine("  xor %rdi, %rdi");
                sb.AppendLine("  mov $0x40, %esi");
                sb.AppendLine("  mov (%rdx,%rdi,4), %edi");
                sb.AppendLine("  mov (%rdx,%rsi,4), %esi");
                sb.AppendLine("\n" + funcName + "start:");
                sb.AppendLine("  mov (%rdx,%rdi,4), %edi");
                sb.AppendLine("  mov %rdi, %r15");
                int fillerInstrCount = divs ? counts[i] - 2 : counts[i];
                for (int fillerIdx = 0, instrIdx = 0; fillerIdx < fillerInstrCount; fillerIdx++)
                {
                    sb.AppendLine(fillerInstrs1[instrIdx]);
                    instrIdx = (instrIdx + 1) % fillerInstrs1.Length;
                }

                sb.AppendLine("  mov (%rdx,%rsi,4), %esi");
                sb.AppendLine("  mov %rsi, %r15");
                for (int fillerIdx = 0, instrIdx = 0; fillerIdx < fillerInstrCount; fillerIdx++)
                {
                    sb.AppendLine(fillerInstrs2[instrIdx]);
                    instrIdx = (instrIdx + 1) % fillerInstrs2.Length;
                }

                sb.AppendLine("  dec %rcx");
                sb.AppendLine("  jne " + funcName + "start");
                sb.AppendLine("  pop %rdx");
                sb.AppendLine("  pop %rcx");
                sb.AppendLine("  pop %r8");
                sb.AppendLine("  pop %r11");
                sb.AppendLine("  pop %r12");
                sb.AppendLine("  pop %r13");
                sb.AppendLine("  pop %r14");
                sb.AppendLine("  pop %r15");
                sb.AppendLine("  pop %rdi");
                sb.AppendLine("  pop %rsi");
                sb.AppendLine("  ret\n\n");
            }
        }

        /// <summary>
        /// Generates pointer chasing test functions in assembly, with xmm0 <- [address using offset from ptr chasing result]
        /// xmm1-4 can be used for
        /// </summary>
        /// <param name="sb"></param>
        /// <param name="counts"></param>
        /// <param name="funcNamePrefix"></param>
        /// <param name="fillerInstrs1"></param>
        /// <param name="fillerInstrs2"></param>
        public static void GenerateX86AsmFpSchedTestFuncs(StringBuilder sb, int[] counts, string funcNamePrefix, string[] fillerInstrs1, string[] fillerInstrs2)
        {
            for (int i = 0; i < counts.Length; i++)
            {
                string funcName = funcNamePrefix + counts[i];
                sb.AppendLine("\n" + funcName + ":");
                sb.AppendLine("  push %rsi");
                sb.AppendLine("  push %rdi");
                sb.AppendLine("  push %r15");
                sb.AppendLine("  push %r14");
                sb.AppendLine("  push %r13");
                sb.AppendLine("  push %r12");
                sb.AppendLine("  push %r8");
                sb.AppendLine("  push %rcx");
                sb.AppendLine("  push %rdx");

                // arguments are in RDI, RSI, RDX, RCX, R8, and R9
                // move them into familiar windows argument regs (rcx, rdx, r8)
                sb.AppendLine("  mov %rdx, %r8"); // r8 <- rdx
                sb.AppendLine("  mov %rsi, %rdx"); // rdx <- rsi
                sb.AppendLine("  mov %rdi, %rcx"); // rcx <- rdi

                sb.AppendLine("  xor %r15, %r15");
                sb.AppendLine("  mov $0x1, %r14");
                sb.AppendLine("  mov $0x1, %r13");
                sb.AppendLine("  mov $0x3, %r12");

                // initialize some FP values off r8 (third argument)
                sb.AppendLine("  movss (%r8), %xmm1");
                sb.AppendLine("  movss 4(%r8), %xmm2");
                sb.AppendLine("  movss 8(%r8), %xmm3");
                sb.AppendLine("  movss 12(%r8), %xmm4");
                sb.AppendLine("  movss 16(%r8), %xmm5");

                // start one chain at 0, and the other at 0x40
                sb.AppendLine("  xor %rdi, %rdi");
                sb.AppendLine("  mov $0x40, %esi");
                sb.AppendLine("\n" + funcName + "start:");
                sb.AppendLine("  mov (%rdx,%rdi,4), %edi");
                sb.AppendLine("  cvtsi2ss %rdi, %xmm0");
                int fillerInstrCount = counts[i];
                for (int fillerIdx = 0, instrIdx = 0; fillerIdx < fillerInstrCount; fillerIdx++)
                {
                    sb.AppendLine(fillerInstrs1[instrIdx]);
                    instrIdx = (instrIdx + 1) % fillerInstrs1.Length;
                }

                sb.AppendLine("  mov (%rdx,%rsi,4), %esi");
                sb.AppendLine("  cvtsi2ss %rsi, %xmm0");
                for (int fillerIdx = 0, instrIdx = 0; fillerIdx < fillerInstrCount; fillerIdx++)
                {
                    sb.AppendLine(fillerInstrs2[instrIdx]);
                    instrIdx = (instrIdx + 1) % fillerInstrs2.Length;
                }

                sb.AppendLine("  dec %rcx");
                sb.AppendLine("  jne " + funcName + "start");
                sb.AppendLine("  pop %rdx");
                sb.AppendLine("  pop %rcx");
                sb.AppendLine("  pop %r8");
                sb.AppendLine("  pop %r12");
                sb.AppendLine("  pop %r13");
                sb.AppendLine("  pop %r14");
                sb.AppendLine("  pop %r15");
                sb.AppendLine("  pop %rdi");
                sb.AppendLine("  pop %rsi");
                sb.AppendLine("  ret\n\n");
            }
        }

        public static void GenerateX86AsmFp256SchedTestFuncs(StringBuilder sb, int[] counts, string funcNamePrefix, string[] fillerInstrs1, string[] fillerInstrs2)
        {
            for (int i = 0; i < counts.Length; i++)
            {
                string funcName = funcNamePrefix + counts[i];
                sb.AppendLine("\n" + funcName + ":");
                sb.AppendLine("  push %rsi");
                sb.AppendLine("  push %rdi");
                sb.AppendLine("  push %r15");
                sb.AppendLine("  push %r14");
                sb.AppendLine("  push %r13");
                sb.AppendLine("  push %r12");
                sb.AppendLine("  push %r8");
                sb.AppendLine("  push %rcx");
                sb.AppendLine("  push %rdx");

                // arguments are in RDI, RSI, RDX, RCX, R8, and R9
                // move them into familiar windows argument regs (rcx, rdx, r8)
                sb.AppendLine("  mov %rdx, %r8"); // r8 <- rdx
                sb.AppendLine("  mov %rsi, %rdx"); // rdx <- rsi
                sb.AppendLine("  mov %rdi, %rcx"); // rcx <- rdi

                sb.AppendLine("  xor %r15, %r15");
                sb.AppendLine("  mov $0x1, %r14");
                sb.AppendLine("  mov $0x1, %r13");
                sb.AppendLine("  mov $0x3, %r12");

                // initialize some FP values off r8 (third argument)
                sb.AppendLine("  vzeroupper");
                sb.AppendLine("  vmovups (%r8), %ymm1");
                sb.AppendLine("  vmovups 32(%r8), %ymm2");
                sb.AppendLine("  vmovups 64(%r8), %ymm3");
                sb.AppendLine("  vmovups 96(%r8), %ymm4");
                sb.AppendLine("  vmovups 128(%r8), %ymm5");

                // start one chain at 0, and the other at 0x40
                sb.AppendLine("  xor %rdi, %rdi");
                sb.AppendLine("  mov $0x40, %esi");
                sb.AppendLine("\n" + funcName + "start:");
                sb.AppendLine("  mov (%rdx,%rdi,4), %edi");
                sb.AppendLine("  vbroadcastss (%r8,%rdi,4), %ymm0");
                int fillerInstrCount = counts[i];
                for (int fillerIdx = 0, instrIdx = 0; fillerIdx < fillerInstrCount; fillerIdx++)
                {
                    sb.AppendLine(fillerInstrs1[instrIdx]);
                    instrIdx = (instrIdx + 1) % fillerInstrs1.Length;
                }

                sb.AppendLine("  mov (%rdx,%rsi,4), %esi");
                sb.AppendLine("  vbroadcastss (%r8,%rsi,4), %ymm0");
                for (int fillerIdx = 0, instrIdx = 0; fillerIdx < fillerInstrCount; fillerIdx++)
                {
                    sb.AppendLine(fillerInstrs2[instrIdx]);
                    instrIdx = (instrIdx + 1) % fillerInstrs2.Length;
                }

                sb.AppendLine("  dec %rcx");
                sb.AppendLine("  jne " + funcName + "start");
                sb.AppendLine("  pop %rdx");
                sb.AppendLine("  pop %rcx");
                sb.AppendLine("  pop %r8");
                sb.AppendLine("  pop %r12");
                sb.AppendLine("  pop %r13");
                sb.AppendLine("  pop %r14");
                sb.AppendLine("  pop %r15");
                sb.AppendLine("  pop %rdi");
                sb.AppendLine("  pop %rsi");
                sb.AppendLine("  ret\n\n");
            }
        }

        /// <summary>
        /// Generates test functions in assembly, with filler instructions between two divs
        /// Args are put into rcx, rdx, r8 (in that order) to match Windows calling convention
        /// </summary>
        /// <param name="sb">StringBuilder to append to</param>
        /// <param name="counts">Sizes to test the structure at</param>
        /// <param name="funcNamePrefix">Function name prefix</param>
        /// <param name="fillerInstrs1">Filler instructions after first ptr chasing load</param>
        /// <param name="fillerInstrs2">Filler instructions after second ptr chasing load</param>
        /// <param name="includePtrChasingLoads">If true, count pointer chasing loads as consuming the tested resource
        /// (i.e. ptr chasing loads consume a ROB and integer RF slot) </param>
        /// <param name="initInstrs">Any extra initialization instructions</param>
        public static void GenerateX86NasmDivStructureTestFuncs(StringBuilder sb, int[] counts, string funcNamePrefix, string[] fillerInstrs1, string[] fillerInstrs2, bool includePtrChasingLoads = true, string initInstrs = null)
        {
            for (int i = 0; i < counts.Length; i++)
            {
                string funcName = funcNamePrefix + counts[i];
                sb.AppendLine("\n" + funcName + ":");
                sb.AppendLine("  push rsi");
                sb.AppendLine("  push rdi");
                sb.AppendLine("  push r15");
                sb.AppendLine("  push r14");
                sb.AppendLine("  push r13");
                sb.AppendLine("  push r12");
                sb.AppendLine("  push r11");

                sb.AppendLine("  xor r15, r15");
                sb.AppendLine("  mov r14, 0x10");
                sb.AppendLine("  mov r13, 0x20");
                sb.AppendLine("  mov r12, 0x30");
                sb.AppendLine("  mov r11, 0x40");


                if (initInstrs != null) sb.AppendLine(initInstrs);

                sb.AppendLine("  mov rdi, rdx");
                sb.AppendLine("  mov rsi, rdx");
                sb.AppendLine("\n" + funcName + "start:");
                sb.AppendLine("  xor rdx, rdx");
                sb.AppendLine("  mov rax, rdi");
                sb.AppendLine("  idiv rsi");
                sb.AppendLine("  xor rdx, rdx");
                sb.AppendLine("  idiv rsi");
                sb.AppendLine("  xor rdx, rdx");
                sb.AppendLine("  idiv rsi");
                sb.AppendLine("  xor rdx, rdx");
                sb.AppendLine("  idiv rsi");
                sb.AppendLine("  xor rdx, rdx");
                sb.AppendLine("  idiv rsi");
                sb.AppendLine("  xor rdx, rdx");
                sb.AppendLine("  idiv rsi");
                sb.AppendLine("  sub rsi, rax");
                sb.AppendLine("  inc rsi");
                int fillerInstrCount = includePtrChasingLoads ? counts[i] - 2 : counts[i];
                for (int fillerIdx = 0, instrIdx = 0; fillerIdx < fillerInstrCount; fillerIdx++)
                {
                    sb.AppendLine(fillerInstrs1[instrIdx]);
                    instrIdx = (instrIdx + 1) % fillerInstrs1.Length;
                }

                sb.AppendLine("  xor rdx, rdx");
                sb.AppendLine("  mov rax, rsi");
                sb.AppendLine("  idiv rdi");
                sb.AppendLine("  xor rdx, rdx");
                sb.AppendLine("  idiv rdi");
                sb.AppendLine("  xor rdx, rdx");
                sb.AppendLine("  idiv rdi");
                sb.AppendLine("  xor rdx, rdx");
                sb.AppendLine("  idiv rdi");
                sb.AppendLine("  xor rdx, rdx");
                sb.AppendLine("  idiv rdi");
                sb.AppendLine("  xor rdx, rdx");
                sb.AppendLine("  idiv rdi");
                sb.AppendLine("  sub rdi, rax");
                sb.AppendLine("  inc rdi");
                for (int fillerIdx = 0, instrIdx = 0; fillerIdx < fillerInstrCount; fillerIdx++)
                {
                    sb.AppendLine(fillerInstrs2[instrIdx]);
                    instrIdx = (instrIdx + 1) % fillerInstrs2.Length;
                }

                sb.AppendLine("  dec rcx");
                sb.AppendLine("  jne " + funcName + "start");
                sb.AppendLine("  pop r11");
                sb.AppendLine("  pop r12");
                sb.AppendLine("  pop r13");
                sb.AppendLine("  pop r14");
                sb.AppendLine("  pop r15");
                sb.AppendLine("  pop rdi");
                sb.AppendLine("  pop rsi");
                sb.AppendLine("  ret\n\n");
            }
        }

        /// <summary>
        /// Generates test functions in ARM assembly.
        /// Registers x15-x10 can be used for integer stuff
        /// Args are in x0, x1, x2
        /// </summary>
        /// <param name="sb"></param>
        /// <param name="counts"></param>
        /// <param name="funcNamePrefix"></param>
        /// <param name="fillerInstrs1"></param>
        /// <param name="fillerInstrs2"></param>
        /// <param name="includePtrChasingLoads"></param>
        /// <param name="dsb">use dsb as lfence</param>
        public static void GenerateArmAsmStructureTestFuncs(StringBuilder sb,
            int[] counts,
            string funcNamePrefix,
            string[] fillerInstrs1,
            string[] fillerInstrs2,
            bool includePtrChasingLoads = false,
            string initInstrs = null,
            string postLoadInstrs1 = null,
            string postLoadInstrs2 = null,
            bool dsb = true)
        {
            for (int i = 0; i < counts.Length; i++)
            {
                string funcName = funcNamePrefix + counts[i];

                // args in x0, x1
                sb.AppendLine("\n" + funcName + ":");
                sb.AppendLine("  sub sp, sp, #0x50");
                sb.AppendLine("  stp x14, x15, [sp, #0x10]");
                sb.AppendLine("  stp x12, x13, [sp, #0x20]");
                sb.AppendLine("  stp x10, x11, [sp, #0x30]");
                sb.AppendLine("  stp x25, x26, [sp, #0x40]");
                sb.AppendLine("  mov x15, 1");
                sb.AppendLine("  mov x14, 2");
                sb.AppendLine("  mov x13, 3");
                sb.AppendLine("  mov x12, 4");
                sb.AppendLine("  mov x11, 5");
                sb.AppendLine("  mov x10, 6");
                if (initInstrs != null) sb.AppendLine(initInstrs);
                sb.AppendLine("  mov w25, 0x0");
                sb.AppendLine("  mov w26, 0x40");
                sb.AppendLine("\n" + funcName + "start:");
                sb.AppendLine("  ldr w25, [x1, w25, uxtw #2]"); // current = A[current]
                if (postLoadInstrs1 != null) sb.AppendLine(postLoadInstrs1);
                int fillerInstrCount = includePtrChasingLoads ? counts[i] - 2 : counts[i];
                for (int nopIdx = 0, addIdx = 0; nopIdx < fillerInstrCount; nopIdx++)
                {
                    sb.AppendLine(fillerInstrs1[addIdx]);
                    addIdx = (addIdx + 1) % fillerInstrs1.Length;
                }

                sb.AppendLine("  ldr w26, [x1, w26, uxtw #2]");
                if (dsb)
                {
                    sb.AppendLine("  dsb sy");
                    sb.AppendLine("  isb sy");
                }
                else
                {
                    if (postLoadInstrs2 != null) sb.AppendLine(postLoadInstrs2);
                    for (int nopIdx = 0, addIdx = 0; nopIdx < fillerInstrCount; nopIdx++)
                    {
                        sb.AppendLine(fillerInstrs2[addIdx]);
                        addIdx = (addIdx + 1) % fillerInstrs2.Length;
                    }
                }

                sb.AppendLine("  sub x0, x0, 1");
                sb.AppendLine("  cbnz x0, " + funcName + "start");
                sb.AppendLine("  ldp x25, x26, [sp, #0x40]");
                sb.AppendLine("  ldp x10, x11, [sp, #0x30]");
                sb.AppendLine("  ldp x12, x13, [sp, #0x20]");
                sb.AppendLine("  ldp x14, x15, [sp, #0x10]");
                sb.AppendLine("  add sp, sp, #0x50");
                sb.AppendLine("  ret\n\n");
            }
        }

        public static void GenerateArmAsmNsqTestFuncs(StringBuilder sb,
            int totalOps,
            int[] counts,
            string funcNamePrefix,
            string[] dependentInstrs,
            string[] indepInstrs,
            bool ptrChasingLoadsInSq = false,
            string initInstrs = null,
            string postLoadInstrs = null)
        {
            for (int i = 0; i < counts.Length; i++)
            {
                string funcName = funcNamePrefix + counts[i];

                // args in x0, x1
                sb.AppendLine("\n" + funcName + ":");
                sb.AppendLine("  sub sp, sp, #0x50");
                sb.AppendLine("  stp x14, x15, [sp, #0x10]");
                sb.AppendLine("  stp x12, x13, [sp, #0x20]");
                sb.AppendLine("  stp x10, x11, [sp, #0x30]");
                sb.AppendLine("  stp x25, x26, [sp, #0x40]");
                sb.AppendLine("  mov x15, 1");
                sb.AppendLine("  mov x14, 2");
                sb.AppendLine("  mov x13, 3");
                sb.AppendLine("  mov x12, 4");
                sb.AppendLine("  mov x11, 5");
                sb.AppendLine("  mov x10, 6");
                if (initInstrs != null) sb.AppendLine(initInstrs);
                sb.AppendLine("  mov w25, 0x0");
                sb.AppendLine("  mov w26, 0x40");
                sb.AppendLine("\n" + funcName + "start:");
                sb.AppendLine("  ldr w25, [x1, w25, uxtw #2]"); // current = A[current]
                if (postLoadInstrs != null) sb.AppendLine(postLoadInstrs);
                int sqInstrs = ptrChasingLoadsInSq ? counts[i] - 2 : counts[i];
                for (int fillerIdx = 0, instrIdx = 0; fillerIdx < totalOps; fillerIdx++)
                {
                    if (fillerIdx < sqInstrs)
                        sb.AppendLine(dependentInstrs[instrIdx]);
                    else
                        sb.AppendLine(indepInstrs[instrIdx]);

                    instrIdx = (instrIdx + 1) % dependentInstrs.Length;
                }

                sb.AppendLine("  ldr w26, [x1, w26, uxtw #2]");
                sb.AppendLine("  dsb sy"); // close enough to lfence
                sb.AppendLine("  isb sy");
                sb.AppendLine("  sub x0, x0, 1");
                sb.AppendLine("  cbnz x0, " + funcName + "start");
                sb.AppendLine("  ldp x25, x26, [sp, #0x40]");
                sb.AppendLine("  ldp x10, x11, [sp, #0x30]");
                sb.AppendLine("  ldp x12, x13, [sp, #0x20]");
                sb.AppendLine("  ldp x14, x15, [sp, #0x10]");
                sb.AppendLine("  add sp, sp, #0x50");
                sb.AppendLine("  ret\n\n");
            }
        }

        /// <summary>
        /// Filler for todo functions
        /// </summary>
        /// <param name="sb"></param>
        /// <param name="counts"></param>
        /// <param name="funcNamePrefix"></param>
        public static void GenerateStub(StringBuilder sb, int[] counts, string funcNamePrefix)
        {
            for (int i = 0; i < counts.Length; i++)
            {
                string funcName = funcNamePrefix + counts[i];
                sb.AppendLine("\n" + funcName + ":");
                sb.AppendLine("  ret");
            }
        }

        public static void GenerateArmAsmFpSchedTestFuncs(StringBuilder sb, int[] counts, string funcNamePrefix, string[] fillerInstrs1, string[] fillerInstrs2)
        {
            GenerateArmAsmStructureTestFuncs(sb,
                counts,
                funcNamePrefix,
                fillerInstrs1,
                fillerInstrs2,
                false,
                null,
                "  ldr s16, [x2, w25, uxtw #2]",
                "  ldr s16, [x2, w26, uxtw #2]");
        }

        public static void GenerateArmAsmDivStructureTestFuncs(StringBuilder sb,
            int[] counts,
            string funcNamePrefix,
            string[] fillerInstrs1,
            string[] fillerInstrs2,
            bool includePtrChasingLoads = false,
            string initInstrs = null)
        {
            for (int i = 0; i < counts.Length; i++)
            {
                string funcName = funcNamePrefix + counts[i];

                // args in x0 = iterations, x1 = list size, x2 = list (sink)
                sb.AppendLine("\n" + funcName + ":");
                sb.AppendLine("  sub sp, sp, #0x50");
                sb.AppendLine("  stp x14, x15, [sp, #0x10]");
                sb.AppendLine("  stp x12, x13, [sp, #0x20]");
                sb.AppendLine("  stp x10, x11, [sp, #0x30]");
                sb.AppendLine("  stp x25, x26, [sp, #0x40]");
                sb.AppendLine("  mov x15, 1");
                sb.AppendLine("  mov x14, 2");
                sb.AppendLine("  mov x13, 3");
                sb.AppendLine("  mov x12, 4");
                sb.AppendLine("  mov x11, 5");
                if (initInstrs != null) sb.AppendLine(initInstrs);
                sb.AppendLine("  mov w25, 0x0");
                sb.AppendLine("  mov w26, 0x40");
                sb.AppendLine("\n" + funcName + "start:");
                sb.AppendLine("  mov w25, w1");
                sb.AppendLine("  udiv w25, w25, w13");
                sb.AppendLine("  udiv w25, w25, w13");
                sb.AppendLine("  udiv w25, w25, w13");
                sb.AppendLine("  udiv w25, w25, w13");
                sb.AppendLine("  udiv w25, w25, w13");
                int fillerInstrCount = includePtrChasingLoads ? counts[i] - 2 : counts[i];
                for (int instrIdx = 0, addIdx = 0; instrIdx < fillerInstrCount; instrIdx++)
                {
                    sb.AppendLine(fillerInstrs1[addIdx]);
                    addIdx = (addIdx + 1) % fillerInstrs1.Length;
                }

                sb.AppendLine("  mov w26, w1");
                sb.AppendLine("  udiv w26, w26, w13");
                sb.AppendLine("  udiv w26, w26, w13");
                sb.AppendLine("  udiv w26, w26, w13");
                sb.AppendLine("  udiv w26, w26, w13");
                sb.AppendLine("  udiv w26, w26, w13");

                for (int instrIdx = 0, addIdx = 0; instrIdx < fillerInstrCount; instrIdx++)
                {
                    sb.AppendLine(fillerInstrs2[addIdx]);
                    addIdx = (addIdx + 1) % fillerInstrs2.Length;
                }

                sb.AppendLine("  sub x0, x0, 1");
                sb.AppendLine("  cbnz x0, " + funcName + "start");
                sb.AppendLine("  ldp x25, x26, [sp, #0x40]");
                sb.AppendLine("  ldp x10, x11, [sp, #0x30]");
                sb.AppendLine("  ldp x12, x13, [sp, #0x20]");
                sb.AppendLine("  ldp x14, x15, [sp, #0x10]");
                sb.AppendLine("  add sp, sp, #0x50");
                sb.AppendLine("  ret\n\n");
            }
        }

        // Just to deal with A73
        public static string GetArmDependentBranch(string prefix)
        {
            return $"  cmp x25, x26\n  b.eq {prefix}_badthing";
        }

        public static string GetArmDependentBranchTarget(string prefix)
        {
            return $"{prefix}_badthing:\n  .word 0xf7f0a000";
        }

        public static string GetRiscvDependentBranch(string prefix)
        {
            return $"  beq x5, x6, {prefix}_badthing";
        }

        public static string GetRiscvDependentBranchTarget(string prefix)
        {
            return $"{prefix}_badthing:\n  .word 0x00000000";
        }

        public static void GenerateArmAsmDivNsqTestFuncs(StringBuilder sb,
            int maxSize,
            int[] counts,
            string funcNamePrefix,
            string[] depInstrs,
            string[] indepInstrs,
            bool divsInSq = false,
            string initInstrs = null)
        {
            for (int i = 0; i < counts.Length; i++)
            {
                string funcName = funcNamePrefix + counts[i];

                // args in x0 = iterations, x1 = list size, x2 = list (sink)
                sb.AppendLine("\n" + funcName + ":");
                sb.AppendLine("  sub sp, sp, #0x50");
                sb.AppendLine("  stp x14, x15, [sp, #0x10]");
                sb.AppendLine("  stp x12, x13, [sp, #0x20]");
                sb.AppendLine("  stp x10, x11, [sp, #0x30]");
                sb.AppendLine("  stp x25, x26, [sp, #0x40]");
                sb.AppendLine("  mov x15, 1");
                sb.AppendLine("  mov x14, 2");
                sb.AppendLine("  mov x13, 3");
                sb.AppendLine("  mov x12, 4");
                sb.AppendLine("  mov x11, 5");
                if (initInstrs != null) sb.AppendLine(initInstrs);
                sb.AppendLine("  mov w25, 0x0");
                sb.AppendLine("  mov w26, 0x40");
                sb.AppendLine("\n" + funcName + "start:");
                sb.AppendLine("  mov w25, w1");
                sb.AppendLine("  udiv w25, w25, w13");
                sb.AppendLine("  udiv w25, w25, w13");
                sb.AppendLine("  udiv w25, w25, w13");
                sb.AppendLine("  udiv w25, w25, w13");
                sb.AppendLine("  udiv w25, w25, w13");
                int fillerInstrCount = divsInSq ? counts[i] - 6 : counts[i];
                for (int fillerIdx = 0, depInstrIdx = 0, indepInstrIdx = 0; fillerIdx < maxSize; fillerIdx++)
                {
                    if (fillerIdx < fillerInstrCount)
                    {
                        sb.AppendLine(depInstrs[depInstrIdx]);
                        depInstrIdx = (depInstrIdx + 1) % depInstrs.Length;
                    }
                    else
                    {
                        sb.AppendLine(indepInstrs[indepInstrIdx]);
                        indepInstrIdx = (indepInstrIdx + 1) % indepInstrs.Length;
                    }
                }
                sb.AppendLine("  mov w26, w1");
                sb.AppendLine("  udiv w26, w26, w13");
                sb.AppendLine("  udiv w26, w26, w13");
                sb.AppendLine("  udiv w26, w26, w13");
                sb.AppendLine("  udiv w26, w26, w13");
                sb.AppendLine("  udiv w26, w26, w13");
                sb.AppendLine("  mov w25, w26");

                for (int fillerIdx = 0, depInstrIdx = 0, indepInstrIdx = 0; fillerIdx < maxSize; fillerIdx++)
                {
                    if (fillerIdx < fillerInstrCount)
                    {
                        sb.AppendLine(depInstrs[depInstrIdx]);
                        depInstrIdx = (depInstrIdx + 1) % depInstrs.Length;
                    }
                    else
                    {
                        sb.AppendLine(indepInstrs[indepInstrIdx]);
                        indepInstrIdx = (indepInstrIdx + 1) % indepInstrs.Length;
                    }
                }

                sb.AppendLine("  sub x0, x0, 1");
                sb.AppendLine("  cbnz x0, " + funcName + "start");
                sb.AppendLine("  ldp x25, x26, [sp, #0x40]");
                sb.AppendLine("  ldp x10, x11, [sp, #0x30]");
                sb.AppendLine("  ldp x12, x13, [sp, #0x20]");
                sb.AppendLine("  ldp x14, x15, [sp, #0x10]");
                sb.AppendLine("  add sp, sp, #0x50");
                sb.AppendLine("  ret\n\n");
            }
        }

        public static void GenerateMipsAsmStructureTestFuncs(StringBuilder sb,
            int[] counts,
            string funcNamePrefix,
            string[] fillerInstrs1,
            string[] fillerInstrs2,
            bool includePtrChasingLoads = false,
            string initInstrs = null,
            string postLoadInstrs1 = null,
            string postLoadInstrs2 = null,
            bool dsb = false)
        {
            for (int i = 0; i < counts.Length; i++)
            {
                string funcName = funcNamePrefix + counts[i];

                // args in r4 = iterations, r5 = list, r6 = list (sink)
                // use r12 and r13 for ptr chasing loads, r14 as decrement for iteration count
                sb.AppendLine("\n" + funcName + ":");
                sb.AppendLine("  ld.d $r12, $r5, 0");
                sb.AppendLine("  ld.d $r13, $r5, 64");
                sb.AppendLine("  xor $r14, $r14, $r14");
                sb.AppendLine("  addi.d $r14, $r14, 1");
                if (initInstrs != null) sb.AppendLine(initInstrs);
                sb.AppendLine("\n" + funcName + "start:");
                sb.AppendLine("  ld.d $r12, $r12, 0");
                if (postLoadInstrs1 != null) sb.AppendLine(postLoadInstrs1);
                int fillerInstrCount = includePtrChasingLoads ? counts[i] - 2 : counts[i];
                for (int instrIdx = 0, addIdx = 0; instrIdx < fillerInstrCount; instrIdx++)
                {
                    sb.AppendLine(fillerInstrs1[addIdx]);
                    addIdx = (addIdx + 1) % fillerInstrs1.Length;
                }
                sb.AppendLine("  ld.d $r13, $r13, 0");
                if (postLoadInstrs2 != null) sb.AppendLine(postLoadInstrs2);
                for (int instrIdx = 0, addIdx = 0; instrIdx < fillerInstrCount; instrIdx++)
                {
                    sb.AppendLine(fillerInstrs2[addIdx]);
                    addIdx = (addIdx + 1) % fillerInstrs2.Length;
                }
                sb.AppendLine("  sub.d $r4, $r4, $r14");
                sb.AppendLine("  bnez $r4, " + funcName + "start");
                sb.AppendLine(" jr $r1");
            }
        }

        public static void GenerateRiscvAsmStructureTestFuncs(StringBuilder sb,
            int[] counts,
            string funcNamePrefix,
            string[] fillerInstrs1,
            string[] fillerInstrs2,
            bool includePtrChasingLoads = false,
            string initInstrs = null,
            string postLoadInstrs1 = null,
            string postLoadInstrs2 = null,
            bool fence = true)
        {
            for (int i = 0; i < counts.Length; i++)
            {
                string funcName = funcNamePrefix + counts[i];

                // args in x10 = iterations, x11 = list, x12 = list (sink)
                // temporaries are x5-x7, x28-x31
                // x18-27 are to be saved
                // use x5 and x6 for ptr chasing loads
                sb.AppendLine("\n" + funcName + ":");
                sb.AppendLine("  addi sp, sp, -88");
                sb.AppendLine("  sd x18, 0(sp)");
                sb.AppendLine("  sd x19, 8(sp)");
                sb.AppendLine("  sd x20, 16(sp)");
                sb.AppendLine("  sd x21, 24(sp)");
                sb.AppendLine("  sd x22, 32(sp)");
                sb.AppendLine("  sd x23, 40(sp)");
                sb.AppendLine("  sd x24, 48(sp)");
                sb.AppendLine("  sd x25, 56(sp)");
                sb.AppendLine("  sd x26, 64(sp)");
                sb.AppendLine("  sd x27, 72(sp)");

                sb.AppendLine("  addi x28, x28, 1");
                sb.AppendLine("  addi x29, x29, 1");
                sb.AppendLine("  addi x30, x30, 1");
                sb.AppendLine("  addi x31, x31, 1");
                sb.AppendLine("  addi x18, x18, 2");
                sb.AppendLine("  addi x19, x19, 3");
                sb.AppendLine("  addi x20, x20, 4");
                sb.AppendLine("  addi x22, x21, 5");

                sb.AppendLine("  ld x5, (x11)");
                sb.AppendLine("  ld x6, 64(x11)");

                if (initInstrs != null) sb.AppendLine(initInstrs);
                sb.AppendLine("\n" + funcName + "start:");
                sb.AppendLine("  ld x5, (x5)");
                if (postLoadInstrs1 != null) sb.AppendLine(postLoadInstrs1);
                int fillerInstrCount = includePtrChasingLoads ? counts[i] - 2 : counts[i];
                for (int instrIdx = 0, addIdx = 0; instrIdx < fillerInstrCount; instrIdx++)
                {
                    sb.AppendLine(fillerInstrs1[addIdx]);
                    addIdx = (addIdx + 1) % fillerInstrs1.Length;
                }
                sb.AppendLine("  ld x6, (x6)");
                if (fence) sb.AppendLine("  fence");
                else
                {
                    if (postLoadInstrs2 != null) sb.AppendLine(postLoadInstrs2);
                    for (int instrIdx = 0, addIdx = 0; instrIdx < fillerInstrCount; instrIdx++)
                    {
                        sb.AppendLine(fillerInstrs2[addIdx]);
                        addIdx = (addIdx + 1) % fillerInstrs2.Length;
                    }
                }

                sb.AppendLine("  addi x10, x10, -1");
                sb.AppendLine("  bge x10, x0, " + funcName + "start");

                sb.AppendLine("  ld x18, 0(sp)");
                sb.AppendLine("  ld x19, 8(sp)");
                sb.AppendLine("  ld x20, 16(sp)");
                sb.AppendLine("  ld x21, 24(sp)");
                sb.AppendLine("  ld x22, 32(sp)");
                sb.AppendLine("  ld x23, 40(sp)");
                sb.AppendLine("  ld x24, 48(sp)");
                sb.AppendLine("  ld x25, 56(sp)");
                sb.AppendLine("  ld x26, 64(sp)");
                sb.AppendLine("  ld x27, 72(sp)");
                sb.AppendLine("  addi sp, sp, 88");
                sb.AppendLine(" ret");
            }
        }
    }
}


================================================
FILE: AsmGen/tests/A73RobTest.cs
================================================
using System.Collections.Generic;
using System.Text;

namespace AsmGen
{
    /// <summary>
    /// Looking for reordering capacity limits on A73 by combining several different instruction types
    /// </summary>
    public class A73RobTest : UarchTest
    {
        public A73RobTest(int low, int high, int step)
        {
            this.Counts = UarchTestHelpers.GenerateCountArray(low, high, step);
            this.Prefix = "a73rob";
            this.Description = "Mixed integer/vec128 + stores";
            this.FunctionDefinitionParameters = "uint64_t iterations, int *arr, float *floatArr";
            this.GetFunctionCallParameters = "structIterations, A, fpArr";
            this.DivideTimeByCount = false;
        }

        public override bool SupportsIsa(IUarchTest.ISA isa)
        {
            if (isa == IUarchTest.ISA.aarch64) return true;
            return false;
        }

        public override void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)
        {
            if (isa == IUarchTest.ISA.aarch64)
            {
                string postLoadInstrs = UarchTestHelpers.GetArmDependentBranch(this.Prefix);
                string initInstrs = "  ldr q0, [x1]\n" +
                "  ldr q1, [x1, #0x10]\n" +
                "  ldr q2, [x1, #0x20]\n" +
                "  ldr q3, [x1, #0x30]\n" +
                "  ldr q4, [x1, #0x40]\n";

                List<string> fillerInstrs = new List<string>();
                for (int i = 0; i < this.Counts[this.Counts.Length - 1];i++)
                {
                    if (i < 33) fillerInstrs.Add("  add v1.4s, v1.4s, v0.4s");
                    else if (i < 66) fillerInstrs.Add("  add x15, x15, x11");
                    else fillerInstrs.Add("  str x12, [x2]");
                }

                string[] fillerInstrsArr = fillerInstrs.ToArray();
                UarchTestHelpers.GenerateArmAsmStructureTestFuncs(
                    sb, this.Counts, this.Prefix, fillerInstrsArr, fillerInstrsArr, false, initInstrs, postLoadInstrs1: postLoadInstrs, postLoadInstrs2: postLoadInstrs);
                sb.AppendLine(UarchTestHelpers.GetArmDependentBranchTarget(this.Prefix));
            }
        }
    }
}


================================================
FILE: AsmGen/tests/AddLoopTest.cs
================================================
using System.Text;

namespace AsmGen
{
    public class AddLoopTest : UarchTest
    {
        /// <summary>
        ///
        /// </summary>
        /// <param name="low">must be greater than 2</param>
        /// <param name="high"></param>
        /// <param name="step"></param>
        public AddLoopTest(int low, int high, int step)
        {
            this.Counts = UarchTestHelpers.GenerateCountArray(low, high, step);
            this.Prefix = "addloop";
            this.Description = $"ADD throughput for various loop sizes. Avoids NOP fusing";
            this.FunctionDefinitionParameters = "uint64_t iterations";
            this.GetFunctionCallParameters = "structIterations";
            this.DivideTimeByCount = true;
        }

        public override bool SupportsIsa(IUarchTest.ISA isa)
        {
            if (isa == IUarchTest.ISA.amd64) return true;
            if (isa == IUarchTest.ISA.aarch64) return true;
            if (isa == IUarchTest.ISA.mips64) return false;
            return false;
        }

        public override void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)
        {
            if (isa == IUarchTest.ISA.amd64) GenerateX86GccAsm(sb);
            if (isa == IUarchTest.ISA.aarch64) GenerateArmAsm(sb);
        }

        public void GenerateX86GccAsm(StringBuilder sb)
        {
            string[] unrolledAdds = new string[4];
            unrolledAdds[0] = "  add %r11, %r15";
            unrolledAdds[1] = "  add %r11, %r14";
            unrolledAdds[2] = "  add %r11, %r13";
            unrolledAdds[3] = "  add %r11, %r12";

            for (int i = 0; i < Counts.Length; i++)
            {
                string funcName = this.Prefix + this.Counts[i];
                sb.AppendLine(funcName + ":");

                // count dec, jnz as instructions in the loop
                for (int nopIdx = 0; nopIdx < this.Counts[i] - 2; nopIdx++) sb.AppendLine(unrolledAdds[nopIdx & 3]);
                sb.AppendLine("  dec %rdi");
                sb.AppendLine("  jnz " + funcName);
                sb.AppendLine("  ret");
            }
        }

        public void GenerateArmAsm(StringBuilder sb)
        {
            string[] unrolledAdds = new string[4];
            unrolledAdds[0] = "  add x15, x15, x11";
            unrolledAdds[1] = "  add x14, x14, x11";
            unrolledAdds[2] = "  add x13, x13, x11";
            unrolledAdds[3] = "  add x12, x12, x11";

            for (int i = 0; i < Counts.Length; i++)
            {
                string funcName = this.Prefix + this.Counts[i];
                sb.AppendLine(funcName + ":");

                for (int nopIdx = 0; nopIdx < this.Counts[i] - 2; nopIdx++) sb.AppendLine(unrolledAdds[nopIdx & 3]);
                sb.AppendLine("  sub x0, x0, 1");
                sb.AppendLine("  cbnz x0, " + funcName);
                sb.AppendLine("  ret");
            }
        }
    }
}

================================================
FILE: AsmGen/tests/AddNsq.cs
================================================
using System.Text;

namespace AsmGen
{
    public class AddNsq : UarchTest
    {
        private int totalOps;
        public AddNsq(int low, int high, int step, int totalOps)
        {
            this.Counts = UarchTestHelpers.GenerateCountArray(low, high, step);
            this.Prefix = "addnsq" + totalOps;
            this.Description = "Integer adds, excluding possible NSQ";
            this.FunctionDefinitionParameters = "uint64_t iterations, int *arr, float *floatArr";
            this.GetFunctionCallParameters = "structIterations, A, fpArr";
            this.DivideTimeByCount = false;
            this.totalOps = totalOps;
        }

        public override bool SupportsIsa(IUarchTest.ISA isa)
        {
            // if (isa == IUarchTest.ISA.aarch64) return true;
            if (isa == IUarchTest.ISA.amd64) return true;
            return false;
        }

        public override void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)
        {
            if (isa == IUarchTest.ISA.amd64)
            {
                string[] depInstrs = new string[2];
                depInstrs[0] = "  add %rdi, %r15";
                depInstrs[1] = "  add %rdi, %r14";

                string[] indepInstrs = new string[2];
                indepInstrs[0] = "  add %r13, %r11";
                indepInstrs[1] = "  add %r12, %r11";
                UarchTestHelpers.GenerateX86AsmNsqTestFuncs(sb, this.totalOps, this.Counts, this.Prefix, depInstrs, indepInstrs, false);
            }
        }
    }
}


================================================
FILE: AsmGen/tests/AddSchedTest.cs
================================================
using System.Text;

namespace AsmGen
{
    public class AddSchedTest : UarchTest
    {
        public AddSchedTest(int low, int high, int step)
        {
            this.Counts = UarchTestHelpers.GenerateCountArray(low, high, step);
            this.Prefix = "addsched";
            this.Description = "Scheduler, Integer Adds";
            this.FunctionDefinitionParameters = "uint64_t iterations, int *arr";
            this.GetFunctionCallParameters = "structIterations, A";
            this.DivideTimeByCount = false;
        }

        public override bool SupportsIsa(IUarchTest.ISA isa)
        {
            if (isa == IUarchTest.ISA.amd64) return true;
            if (isa == IUarchTest.ISA.aarch64) return true;
            if (isa == IUarchTest.ISA.mips64) return true;
            if (isa == IUarchTest.ISA.riscv) return true;
            return false;
        }

        public override void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)
        {
            if (isa == IUarchTest.ISA.amd64)
            {
                string[] unrolledAdds = new string[4];
                unrolledAdds[0] = "  add %rdi, %r15";
                unrolledAdds[1] = "  add %rdi, %r14";
                unrolledAdds[2] = "  add %rdi, %r13";
                unrolledAdds[3] = "  add %rdi, %r12";
                UarchTestHelpers.GenerateX86AsmStructureTestFuncs(sb, this.Counts, this.Prefix, unrolledAdds, unrolledAdds, includePtrChasingLoads: false);
            }
            else if (isa == IUarchTest.ISA.aarch64)
            {
                string[] unrolledAdds = new string[4];
                unrolledAdds[0] = "  add x15, x15, x25";
                unrolledAdds[1] = "  add x14, x14, x25";
                unrolledAdds[2] = "  add x13, x13, x25";
                unrolledAdds[3] = "  add x12, x12, x25";
                UarchTestHelpers.GenerateArmAsmStructureTestFuncs(sb, this.Counts, this.Prefix, unrolledAdds, unrolledAdds, includePtrChasingLoads: false);
            }
            else if (isa == IUarchTest.ISA.mips64)
            {
                string[] unrolledAdds = new string[4];
                unrolledAdds[0] = "  add.d $r15, $r15, $r12";
                unrolledAdds[1] = "  add.d $r16, $r16, $r12";
                unrolledAdds[2] = "  add.d $r17, $r17, $r12";
                unrolledAdds[3] = "  add.d $r18, $r18, $r12";

                string[] unrolledAdds1 = new string[4];
                unrolledAdds1[0] = "  add.d $r15, $r15, $r13";
                unrolledAdds1[1] = "  add.d $r16, $r16, $r13";
                unrolledAdds1[2] = "  add.d $r17, $r17, $r13";
                unrolledAdds1[3] = "  add.d $r18, $r18, $r13";
                UarchTestHelpers.GenerateMipsAsmStructureTestFuncs(sb, this.Counts, this.Prefix, unrolledAdds, unrolledAdds1, includePtrChasingLoads: false);
            }
            else if (isa == IUarchTest.ISA.riscv)
            {
                string[] unrolledAdds = new string[4];
                unrolledAdds[0] = "  add x30, x30, x5";
                unrolledAdds[1] = "  add x29, x29, x5";
                unrolledAdds[2] = "  add x28, x28, x5";
                unrolledAdds[3] = "  add x31, x31, x5";

                string[] unrolledAdds1 = new string[4];
                unrolledAdds1[0] = "  add x30, x30, x6";
                unrolledAdds1[1] = "  add x31, x31, x6";
                unrolledAdds1[2] = "  add x28, x28, x6";
                unrolledAdds1[3] = "  add x29, x29, x6";
                UarchTestHelpers.GenerateRiscvAsmStructureTestFuncs(sb, this.Counts, this.Prefix, unrolledAdds, unrolledAdds1, false);
            }
        }
    }
}


================================================
FILE: AsmGen/tests/AddvNsq.cs
================================================
using System.Text;

namespace AsmGen
{
    public class AddvNsq : UarchTest
    {
        private int totalOps;
        public AddvNsq(int low, int high, int step, int totalOps)
        {
            this.Counts = UarchTestHelpers.GenerateCountArray(low, high, step);
            this.Prefix = "addvnsq";
            this.Description = "ADDV, excluding possible NSQ";
            this.FunctionDefinitionParameters = "uint64_t iterations, int *arr, float *floatArr";
            this.GetFunctionCallParameters = "structIterations, A, fpArr";
            this.DivideTimeByCount = false;
            this.totalOps = totalOps;
        }

        public override bool SupportsIsa(IUarchTest.ISA isa)
        {
            if (isa == IUarchTest.ISA.aarch64) return true;
            return false;
        }

        public override void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)
        {
            if (isa == IUarchTest.ISA.aarch64)
            {
                string postLoadInstrs1 = "  ldr d16, [x2, w25, sxtw #0]";
                string initInstrs = "  ldr d15, [x2]";
                string[] depInstrs = new string[4];
                depInstrs[0] = "  addv h1, v16.4h";
                depInstrs[1] = "  addv h2, v16.4h";
                depInstrs[2] = "  addv h3, v16.4h";
                depInstrs[3] = "  addv h4, v16.4h";

                string[] indepInstrs = new string[4];
                indepInstrs[0] = "  addv h1, v15.4h";
                indepInstrs[1] = "  addv h2, v15.4h";
                indepInstrs[2] = "  addv h3, v15.4h";
                indepInstrs[3] = "  addv h4, v15.4h";
                UarchTestHelpers.GenerateArmAsmNsqTestFuncs(sb, this.totalOps, this.Counts, this.Prefix, depInstrs, indepInstrs, false, initInstrs,
                    postLoadInstrs: postLoadInstrs1);
            }
        }
    }
}


================================================
FILE: AsmGen/tests/AddvSchedTest.cs
================================================
using System.Text;

namespace AsmGen
{
    public class AddvSched : UarchTest
    {
        public AddvSched(int low, int high, int step)
        {
            this.Counts = UarchTestHelpers.GenerateCountArray(low, high, step);
            this.Prefix = "addvsched";
            this.Description = "ADDV Scheduler";
            this.FunctionDefinitionParameters = "uint64_t iterations, int *arr, float *floatArr";
            this.GetFunctionCallParameters = "structIterations, A, fpArr";
            this.DivideTimeByCount = false;
        }

        public override bool SupportsIsa(IUarchTest.ISA isa)
        {
            if (isa == IUarchTest.ISA.aarch64) return true;
            return false;
        }

        public override void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)
        {
            if (isa == IUarchTest.ISA.aarch64)
            {
                string postLoadInstrs1 = "  ldr q16, [x2, w25, sxtw #0]";
                string postLoadInstrs2 = "  ldr q16, [x2, w25, sxtw #0]";
                string[] unrolledInstrs = new string[4];
                unrolledInstrs[0] = "  addv h1, v16.4h";
                unrolledInstrs[1] = "  addv h2, v16.4h";
                unrolledInstrs[2] = "  addv h3, v16.4h";
                unrolledInstrs[3] = "  addv h4, v16.4h";
                UarchTestHelpers.GenerateArmAsmStructureTestFuncs(sb, this.Counts, this.Prefix, unrolledInstrs, unrolledInstrs, false, null,
                    postLoadInstrs1: postLoadInstrs1, postLoadInstrs2: postLoadInstrs2);
            }
        }
    }
}


================================================
FILE: AsmGen/tests/AeseSchedTest.cs
================================================
using System.Text;

namespace AsmGen
{
    public class AeseSchedTest : UarchTest
    {
        public AeseSchedTest(int low, int high, int step)
        {
            this.Counts = UarchTestHelpers.GenerateCountArray(low, high, step);
            this.Prefix = "aesesched";
            this.Description = "aese scheduler";
            this.FunctionDefinitionParameters = "uint64_t iterations, int *arr, float *floatArr";
            this.GetFunctionCallParameters = "structIterations, A, fpArr";
            this.DivideTimeByCount = false;
        }

        public override bool SupportsIsa(IUarchTest.ISA isa)
        {
            if (isa == IUarchTest.ISA.amd64) return true;
            if (isa == IUarchTest.ISA.aarch64) return true;
            return false;
        }

        public override void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)
        {
            if (isa == IUarchTest.ISA.amd64)
            {
                string[] unrolledAdds = new string[4];
                unrolledAdds[0] = "  aesenc %xmm0, %xmm1";
                unrolledAdds[1] = "  aesenc %xmm0, %xmm2";
                unrolledAdds[2] = "  aesenc %xmm0, %xmm3";
                unrolledAdds[3] = "  aesenc %xmm0, %xmm4";

                UarchTestHelpers.GenerateX86AsmFpSchedTestFuncs(sb, this.Counts, this.Prefix, unrolledAdds, unrolledAdds);
            }

            if (isa == IUarchTest.ISA.aarch64)
            {
                string postLoadInstrs1 = "  ldr q0, [x2, w25, uxtw#0]";
                string postLoadInstrs2 = "  ldr q0, [x2, w26, uxtw#0]";
                string[] unrolledAdds = new string[4];
                unrolledAdds[0] = "  aese v1.16b, v0.16b";
                unrolledAdds[1] = "  aese v2.16b, v0.16b";
                unrolledAdds[2] = "  aese v3.16b, v0.16b";
                unrolledAdds[3] = "  aese v4.16b, v0.16b";
                UarchTestHelpers.GenerateArmAsmStructureTestFuncs(sb, this.Counts, this.Prefix, unrolledAdds, unrolledAdds, false, null, postLoadInstrs1, postLoadInstrs2);
            }
        }
    }
}


================================================
FILE: AsmGen/tests/AesencNsq.cs
================================================
using System.Text;

namespace AsmGen
{
    public class AesencNsq : UarchTest
    {
        private int totalOps;
        public AesencNsq(int low, int high, int step, int totalOps)
        {
            this.Counts = UarchTestHelpers.GenerateCountArray(low, high, step);
            this.Prefix = "aesencnsq" + totalOps;
            this.Description = "AESENC, excluding possible NSQ";
            this.FunctionDefinitionParameters = "uint64_t iterations, int *arr, float *floatArr";
            this.GetFunctionCallParameters = "structIterations, A, fpArr";
            this.DivideTimeByCount = false;
            this.totalOps = totalOps;
        }

        public override bool SupportsIsa(IUarchTest.ISA isa)
        {
            // if (isa == IUarchTest.ISA.aarch64) return true;
            if (isa == IUarchTest.ISA.amd64) return true;
            return false;
        }

        public override void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)
        {
            if (isa == IUarchTest.ISA.amd64)
            {
                string postLoadInstrs = "  mov %rdi, %r15\n  add %r8, %r15\n  movdqu (%r15), %xmm1";
                string initInstrs = "  movdqu (%r8), %xmm2";
                string[] depInstrs = new string[4];
                depInstrs[0] = "  aesenc %xmm1, %xmm0";
                depInstrs[1] = "  aesenc %xmm1, %xmm3";
                depInstrs[2] = "  aesenc %xmm1, %xmm4";
                depInstrs[3] = "  aesenc %xmm1, %xmm5";

                string[] indepInstrs = new string[2];
                indepInstrs[0] = "  aesenc %xmm2, %xmm6";
                indepInstrs[1] = "  aesenc %xmm2, %xmm7";
                UarchTestHelpers.GenerateX86AsmNsqTestFuncs(sb, this.totalOps, this.Counts, this.Prefix, depInstrs, indepInstrs, false, initInstrs, postLoadInstrs);
            }
            else if (isa == IUarchTest.ISA.aarch64)
            {
                string postLoadInstrs1 = "  ldr s16, [x2, w25, uxtw #2]";
                string initInstrs = "  ldr s15, [x2]";
                string[] depInstrs = new string[4];
                depInstrs[0] = "  fadd s0, s0, s16";
                depInstrs[1] = "  fadd s1, s1, s16";
                depInstrs[2] = "  fadd s2, s2, s16";
                depInstrs[3] = "  fadd s3, s3, s16";

                string[] indepInstrs = new string[4];
                indepInstrs[0] = "  fadd s17, s17, s15";
                indepInstrs[1] = "  fadd s18, s18, s15";
                indepInstrs[2] = "  fadd s19, s19, s15";
                indepInstrs[3] = "  fadd s20, s20, s15";
                UarchTestHelpers.GenerateArmAsmNsqTestFuncs(sb, this.totalOps, this.Counts, this.Prefix, depInstrs, indepInstrs, false, initInstrs,
                    postLoadInstrs: postLoadInstrs1);
            }
        }
    }
}


================================================
FILE: AsmGen/tests/BranchBufferTest.cs
================================================
using System.Text;

namespace AsmGen
{
    public class BranchBufferTest : UarchTest
    {
        private bool mixNops;
        private bool initialDependentBranch;
        public BranchBufferTest(int low, int high, int step, bool mixNops = false, bool initialDependentBranch = false)
        {
            this.Counts = UarchTestHelpers.GenerateCountArray(low, high, step);
            this.Prefix = "bob" + (initialDependentBranch ? "db" : string.Empty);
            this.Description = "Branch Order Buffer Test (not-taken branches pending retire)" + (initialDependentBranch ? ", preceded by dependent branch" : string.Empty); ;
            this.FunctionDefinitionParameters = "uint64_t iterations, int *arr";
            this.GetFunctionCallParameters = "structIterations, A";
            this.DivideTimeByCount = false;
            this.mixNops = mixNops;
            this.initialDependentBranch = initialDependentBranch;
        }

        public override bool SupportsIsa(IUarchTest.ISA isa)
        {
            if (this.initialDependentBranch && isa != IUarchTest.ISA.aarch64) return false;
            if (isa == IUarchTest.ISA.amd64) return true;
            if (isa == IUarchTest.ISA.aarch64) return true;
            if (isa == IUarchTest.ISA.mips64) return true;
            return false;
        }

        public override void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)
        {
            if (isa == IUarchTest.ISA.amd64)
            {
                GenerateX86GccAsm(sb);
            }
            else if (isa == IUarchTest.ISA.aarch64)
            {
                GenerateArmAsm(sb);
                if (this.initialDependentBranch) sb.AppendLine(UarchTestHelpers.GetArmDependentBranchTarget(this.Prefix));
            }
            else if (isa == IUarchTest.ISA.mips64)
            {
                GenerateMipsAsm(sb);
            }
        }

        public void GenerateX86GccAsm(StringBuilder sb)
        {
            for (int i = 0; i < Counts.Length; i++)
            {
                string funcName = Prefix + Counts[i];
                sb.AppendLine("\n" + funcName + ":");
                sb.AppendLine("  push %rsi");
                sb.AppendLine("  push %rdi");
                sb.AppendLine("  push %r15");
                sb.AppendLine("  push %r14");
                sb.AppendLine("  push %r13");
                sb.AppendLine("  push %r12");
                sb.AppendLine("  push %r11");
                sb.AppendLine("  push %r8");
                sb.AppendLine("  push %rcx");
                sb.AppendLine("  push %rdx");

                // arguments are in RDI, RSI, RDX, RCX, R8, and R9
                // move them into familiar windows argument regs (rcx, rdx, r8)
                sb.AppendLine("  mov %rdx, %r8"); // r8 <- rdx
                sb.AppendLine("  mov %rsi, %rdx"); // rdx <- rsi
                sb.AppendLine("  mov %rdi, %rcx"); // rcx <- rdi

                sb.AppendLine("  xor %r15, %r15");
                sb.AppendLine("  mov $0x1, %r14");
                sb.AppendLine("  mov $0x2, %r13");
                sb.AppendLine("  mov $0x3, %r12");
                sb.AppendLine("  mov $0x4, %r11");

                sb.AppendLine("  xor %rdi, %rdi");
                sb.AppendLine("  mov $0x40, %esi");
                sb.AppendLine("  mov (%rdx,%rdi,4), %edi");
                sb.AppendLine("  mov (%rdx,%rsi,4), %esi");
                sb.AppendLine("\n" + funcName + "start:");
                sb.AppendLine("  mov (%rdx,%rdi,4), %edi");
                for (int fillerIdx = 0; fillerIdx < Counts[i]; fillerIdx++)
                {
                    string jumpLabel = $"{funcName}_edi_target{fillerIdx}";
                    sb.AppendLine($"  cmp %r14, %r11");
                    sb.AppendLine($"  je {jumpLabel}");
                    // try to space the jumps out a bit
                    if (this.mixNops) sb.AppendLine($"  nop");
                    sb.AppendLine($"{jumpLabel}:");
                }

                sb.AppendLine("  mov (%rdx,%rsi,4), %esi");
                for (int fillerIdx = 0; fillerIdx < Counts[i]; fillerIdx++)
                {
                    string jumpLabel = $"{funcName}_esi_target{fillerIdx}";
                    sb.AppendLine($"  cmp %r14, %r11");
                    sb.AppendLine($"  je {jumpLabel}");
                    if (this.mixNops) sb.AppendLine($"  nop");
                    // try to space the jumps out a bit
                    sb.AppendLine($"{jumpLabel}:");
                }

                sb.AppendLine("  dec %rcx");
                sb.AppendLine("  jne " + funcName + "start");
                sb.AppendLine("  pop %rdx");
                sb.AppendLine("  pop %rcx");
                sb.AppendLine("  pop %r8");
                sb.AppendLine("  pop %r11");
                sb.AppendLine("  pop %r12");
                sb.AppendLine("  pop %r13");
                sb.AppendLine("  pop %r14");
                sb.AppendLine("  pop %r15");
                sb.AppendLine("  pop %rdi");
                sb.AppendLine("  pop %rsi");
                sb.AppendLine("  ret\n\n");
            }
        }

        public void GenerateArmAsm(StringBuilder sb)
        {
            string dependentBranch = this.initialDependentBranch ? UarchTestHelpers.GetArmDependentBranch(this.Prefix) : null;
            for (int i = 0; i < Counts.Length; i++)
            {
                string funcName = Prefix + Counts[i];

                sb.AppendLine("\n" + funcName + ":");
                sb.AppendLine("  sub sp, sp, #0x50");
                sb.AppendLine("  stp x14, x15, [sp, #0x10]");
                sb.AppendLine("  stp x12, x13, [sp, #0x20]");
                sb.AppendLine("  stp x10, x11, [sp, #0x30]");
                sb.AppendLine("  stp x25, x26, [sp, #0x40]");
                sb.AppendLine("  mov x15, 1");
                sb.AppendLine("  mov x14, 2");
                sb.AppendLine("  mov x13, 3");
                sb.AppendLine("  mov x12, 4");
                sb.AppendLine("  mov x11, 5");
                sb.AppendLine("  mov x10, 6");

                sb.AppendLine("  mov w25, 0x0");
                sb.AppendLine("  mov w26, 0x40");
                sb.AppendLine("\n" + funcName + "start:");
                sb.AppendLine("  ldr w25, [x1, w25, uxtw #2]"); // current = A[current]
                if (this.initialDependentBranch) sb.AppendLine(dependentBranch);
                for (int fillerIdx = 0; fillerIdx < Counts[i]; fillerIdx++)
                {
                    string jumpLabel = $"{funcName}_w25_target{fillerIdx}";
                    sb.AppendLine($"  cmp x15, x10");
                    sb.AppendLine($"  b.eq {jumpLabel}");
                    sb.AppendLine($"{jumpLabel}:");
                }

                sb.AppendLine("  ldr w26, [x1, w26, uxtw #2]");
                if (this.initialDependentBranch) sb.AppendLine(dependentBranch);
                for (int fillerIdx = 0; fillerIdx < Counts[i]; fillerIdx++)
                {
                    string jumpLabel = $"{funcName}_w26_target{fillerIdx}";
                    sb.AppendLine($"  cmp x15, x10");
                    sb.AppendLine($"  b.eq {jumpLabel}");
                    sb.AppendLine($"{jumpLabel}:");
                }

                sb.AppendLine("  sub x0, x0, 1");
                sb.AppendLine("  cbnz x0, " + funcName + "start");
                sb.AppendLine("  ldp x25, x26, [sp, #0x40]");
                sb.AppendLine("  ldp x10, x11, [sp, #0x30]");
                sb.AppendLine("  ldp x12, x13, [sp, #0x20]");
                sb.AppendLine("  ldp x14, x15, [sp, #0x10]");
                sb.AppendLine("  add sp, sp, #0x50");
                sb.AppendLine("  ret\n\n");
            }
        }

        public void GenerateMipsAsm(StringBuilder sb)
        {
            StringBuilder ntJumpTargets = new StringBuilder();
            for (int i = 0; i < Counts.Length; i++)
            {
                string initInstrs = "  move $r15, $r0\n  addi.d $r15, $r15, 15";
                string funcName = this.Prefix + Counts[i];

                // args in r4 = iterations, r5 = list, r6 = list (sink)
                // use r12 and r13 for ptr chasing loads, r14 as decrement for iteration count
                sb.AppendLine("\n" + funcName + ":");
                sb.AppendLine("  ld.d $r12, $r5, 0");
                sb.AppendLine("  ld.d $r13, $r5, 64");
                sb.AppendLine("  xor $r14, $r14, $r14");
                sb.AppendLine("  addi.d $r14, $r14, 1");
                sb.AppendLine(initInstrs);
                sb.AppendLine("\n" + funcName + "start:");
                sb.AppendLine("  ld.d $r12, $r12, 0");
                int fillerInstrCount = Counts[i];
                for (int instrIdx = 0; instrIdx < fillerInstrCount; instrIdx++)
                {
                    string jumpLabel = "dontenduphere_r12_" + this.Prefix + "_" + Counts[i] + "_" + instrIdx;
                    sb.AppendLine($"  beqz $r15, {jumpLabel}");
                    ntJumpTargets.AppendLine(jumpLabel + ":");
                    ntJumpTargets.AppendLine("  jr $r1");
                }
                sb.AppendLine("  ld.d $r13, $r13, 0");
                for (int instrIdx = 0; instrIdx < fillerInstrCount; instrIdx++)
                {
                    string jumpLabel = "dontenduphere_r13_" + this.Prefix + "_" + Counts[i] + "_" + instrIdx;
                    sb.AppendLine($"  beqz $r15, {jumpLabel}");
                    ntJumpTargets.AppendLine(jumpLabel + ":");
                    ntJumpTargets.AppendLine("  jr $r1");
                }
                sb.AppendLine("  sub.d $r4, $r4, $r14");
                sb.AppendLine("  bnez $r4, " + funcName + "start");
                sb.AppendLine(" jr $r1");
            }

            sb.AppendLine(ntJumpTargets.ToString());
        }
    }
}


================================================
FILE: AsmGen/tests/BranchHistoryTest.cs
================================================
using System.IO;
using System.Text;

namespace AsmGen
{
    public class BranchHistoryTest : IUarchTest
    {
        public string Prefix { get; private set; }

        public string Description { get; private set; }

        public string FunctionDefinitionParameters { get; private set; }

        public string GetFunctionCallParameters { get; private set; }

        public bool DivideTimeByCount { get; private set; }

        private int[] branchCounts;
        private int[] historyCounts;

        public BranchHistoryTest()
        {
            Prefix = "branchhist";
            Description = "Branch predictor pattern recognition";
            FunctionDefinitionParameters = "uint64_t iterations, uint32_t **arr, uint32_t arrLen";
            GetFunctionCallParameters = "structIterations";
            DivideTimeByCount = true;
            branchCounts = new int[] { 1, 2, 4, 8, 16, 32, 64, 128, 256, 512 };
            historyCounts = new int[] { 2, 4, 8, 12, 16, 24, 32, 48, 64, 96, 128, 192, 256, 512, 600, 768, 1024, 1536,
              2048, 3072, 4096, 5120, 6144, 8192, 10240, 12288, 16384, 24567, 32768 };
        }

        public bool SupportsIsa(IUarchTest.ISA isa)
        {
            if (isa == IUarchTest.ISA.amd64) return true;
            if (isa == IUarchTest.ISA.aarch64) return true;
            if (isa == IUarchTest.ISA.mips64) return true;
            if (isa == IUarchTest.ISA.riscv) return true;
            return false;
        }

        public void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)
        {
            if (isa == IUarchTest.ISA.aarch64) GenerateArmAsm(sb);
            if (isa == IUarchTest.ISA.amd64) GenerateX86GccAsm(sb);
            if (isa == IUarchTest.ISA.mips64) GenerateMipsAsm(sb);
            if (isa == IUarchTest.ISA.riscv) GenerateRiscvAsm(sb);
        }

        public void GenerateArmAsm(StringBuilder sb)
        {
            for (int i = 0; i < branchCounts.Length; i++)
            {
                string functionLabel = Prefix + branchCounts[i];
                string loopLabel = functionLabel + "_loop";
                sb.AppendLine("\n" + functionLabel + ":");
                sb.AppendLine("  sub sp, sp, #0x40");
                sb.AppendLine("  stp x11, x12, [sp, #0x30]");
                sb.AppendLine("  stp x15, x16, [sp, #0x20]");
                sb.AppendLine("  stp x13, x14, [sp, #0x10]");
                sb.AppendLine("  eor x16, x16, x16");
                sb.AppendLine("  eor x15, x15, x15");
                sb.AppendLine("  eor x12, x12, x12");
                sb.AppendLine("  eor x11, x11, x11");

                // w14 = branch index, w16 = pattern array index
                sb.AppendLine(loopLabel + ":");
                sb.AppendLine("  eor w14, w14, w14");

                // generate branch blocks
                for (int branchCount = 0; branchCount < branchCounts[i]; branchCount++)
                {
                    string jumpTarget = functionLabel + branchCounts[i] + "_zero" + branchCount;
                    sb.AppendLine("  ldr x15, [x1, w14, uxtw #3]");
                    sb.AppendLine("  add w14, w14, 1");
                    sb.AppendLine("  ldr w13, [x15, w16, uxtw #2]");
                    sb.AppendLine($"  cbnz x13, {jumpTarget}");
                    sb.AppendLine("  add x12, x12, 1");
                    sb.AppendLine(jumpTarget + ":");
                }

                // increment w16, and basically cmov 0 -> w16 if w16 = list length
                sb.AppendLine("  add w16, w16, 1");
                sb.AppendLine("  cmp w16, w2");
                sb.AppendLine("  csel w16, w11, w16, EQ");
                sb.AppendLine("  sub x0, x0, 1");
                sb.AppendLine($"  cbnz x0, {loopLabel}");
                sb.AppendLine("  mov x0, x12");
                sb.AppendLine("  ldp x11, x12, [sp, #0x30]");
                sb.AppendLine("  ldp x15, x16, [sp, #0x20]");
                sb.AppendLine("  ldp x13, x14, [sp, #0x10]");
                sb.AppendLine("  add sp, sp, #0x40");
                sb.AppendLine("  ret");
            }
        }

        public void GenerateX86GccAsm(StringBuilder sb)
        {
            for (int i = 0; i < branchCounts.Length; i++)
            {
                string functionLabel = Prefix + branchCounts[i];
                sb.AppendLine("\n" + functionLabel + ":");
                sb.AppendLine("  push %rbx");
                sb.AppendLine("  push %r8");
                sb.AppendLine("  push %r9");
                sb.AppendLine("  xor %rbx, %rbx");
                sb.AppendLine("  xor %r8, %r8");
                sb.AppendLine("  xor %r9, %r9");

                string loopLabel = functionLabel + "_loop";
                sb.AppendLine("\n" + loopLabel + ":");
                sb.AppendLine("  xor %r11, %r11"); // set index into arr of arrs to 0
                for (int branchCount = 0; branchCount < branchCounts[i]; branchCount++)
                {
                    sb.AppendLine("  mov (%rsi,%r11,8), %r10");  // load array base pointer into r10
                    sb.AppendLine("  inc %r11");
                    sb.AppendLine("  mov (%r10,%rbx,4), %eax "); // read element from branch history test array
                    sb.AppendLine("  test %eax, %eax");

                    // conditional branch on test array value
                    string zeroLabel = Prefix + branchCounts[i] + "_zero" + branchCount;
                    sb.AppendLine("  jz " + zeroLabel);
                    sb.AppendLine("  inc %r8"); // r8 is just a sink here
                    sb.AppendLine(zeroLabel + ":");
                }

                // loop around in pattern history test array if necessary
                // avoiding an extra branch to not pollute BPU history
                sb.AppendLine("  inc %rbx");
                sb.AppendLine("  cmp %rbx, %rdx");
                sb.AppendLine("  cmove %r9, %rbx");

                // end of main loop over iteration count
                sb.AppendLine("  dec %rdi");
                sb.AppendLine("  jnz " + loopLabel);

                // function epilogue
                sb.AppendLine("  mov %r8, %rax");
                sb.AppendLine("  pop %r9");
                sb.AppendLine("  pop %r8");
                sb.AppendLine("  pop %rbx");
                sb.AppendLine("  ret");
            }
        }

        public void GenerateMipsAsm(StringBuilder sb)
        {
            // Generate an array of branch history test functions, one for each branch count
            for (int i = 0; i < branchCounts.Length; i++)
            {
                // branchtestFunc(iterations, testArrToArr, historyLen)
                // r4 = iterations, r5 = array of pointers to pattern arrays for each branch, r6 = history length (length of each array)
                // temporary registers: r12-r20

                // write code here
                string functionLabel = Prefix + branchCounts[i];
                sb.AppendLine("\n" + functionLabel + ":");

                // r12 = branch index, r13 = index into pattern array
                sb.AppendLine("  move $r13, $r0");
                sb.AppendLine("  move $r18, $r0");
                sb.AppendLine("  move $r20, $r0");
                sb.AppendLine("  addi.d $r20, $r20, 1");

                string loopLabel = functionLabel + "_loop";
                sb.AppendLine("\n" + loopLabel + ":");
                sb.AppendLine("  move $r12, $r0"); // set branch index to zero

                // generate branch blocks
                for (int branchCount = 0; branchCount < branchCounts[i]; branchCount++)
                {
                    string jumpTarget = functionLabel + branchCounts[i] + "_zero" + branchCount;

                    // load the branch's pattern array
                    sb.AppendLine("  alsl.d $r14, $r12, $r0, 0x3");    // get offset into array in bytes, using r12 as array index.
                    sb.AppendLine("  add.d $r14, $r14, $r5");          // get address into r14
                    sb.AppendLine("  ld.d $r15, $r14, 0");             // r15 = base address of curent branch's target array
                    sb.AppendLine("  addi.d $r12, $r12, 1");            // next branch

                    // load element from pattern array indicating where we should branch
                    sb.AppendLine("  alsl.d $r16, $r13, $r0, 0x2");    // use r13 to index into pattern array
                    sb.AppendLine("  add.d $r16, $r16, $r15");         // r16 = address of element we want to load
                    sb.AppendLine("  ld.w $r17, $r16, 0");
                    sb.AppendLine($"  bnez $r17, {jumpTarget}");       // branch if 1
                    sb.AppendLine("  addi.d $r18, $r18, 1");
                    sb.AppendLine(jumpTarget + ":");
                }

                // increment w16, and basically cmov 0 -> w16 if w16 = list length
                // increment r13 (idx into pattern array)
                sb.AppendLine("  addi.d $r13, $r13, 1");
                sb.AppendLine("  sub.d $r19, $r6, $r13");    // r19 = history length - index
                sb.AppendLine("  maskeqz $r13, $r13, $r19"); // set index back to 0 to repeat pattern, if history length - index == 0
                sb.AppendLine("  sub.d $r4, $r4, $r20");            // decrement iteration count
                sb.AppendLine($"  bnez $r4, {loopLabel}");
                sb.AppendLine("  move $r4, $r18"); // return the count of NT branches for tracking RNG quality

                sb.AppendLine("  jr $r1");
            }
        }

        public void GenerateRiscvAsm(StringBuilder sb)
        {
            // Generate an array of branch history test functions, one for each branch count
            for (int i = 0; i < branchCounts.Length; i++)
            {
                // branchtestFunc(iterations, testArrToArr, historyLen)
                // a0 = iterations, a1 = array of pointers to pattern arrays for each branch, a2 = length of each array (history length)
                // t0-t7 temporary registers

                // write code here
                string functionLabel = Prefix + branchCounts[i];
                sb.AppendLine("\n" + functionLabel + ":");
                sb.AppendLine("  addi sp, sp, -16");
                sb.AppendLine("  sd s0, (sp)");
                // t1 = index into pattern array
                sb.AppendLine("  li t1, 0");
                sb.AppendLine("  li t6, 0");

                string loopLabel = functionLabel + "_loop";
                sb.AppendLine("\n" + loopLabel + ":");
                sb.AppendLine("  mv t2, a1"); // start of array of pointers to pattern arrays

                // generate branchCount blocks, each of which traverses its own array
                for (int branchCount = 0; branchCount < branchCounts[i]; branchCount++)
                {
                    string jumpTarget = functionLabel + branchCounts[i] + "_zero" + branchCount;

                    // load the branch's pattern array (a1 -> ptr -> array)
                    sb.AppendLine("  ld t3, (t2)");            // load pointer to array

                    // t3 = base address of branch's array
                    sb.AppendLine("  slli t4, t1, 2");
                    sb.AppendLine("  add t4, t4, t3");
                    sb.AppendLine("  lw t5, (t4)");    // should have 1 or 0
                    sb.AppendLine("  addi t2, t2, 8"); // next branch
                    sb.AppendLine($"  beq t5, x0, {jumpTarget}");
                    sb.AppendLine("  addi t6, t6, 1");  // dummy increment to track not-taken/taken branch ratio
                    sb.AppendLine(jumpTarget + ":");
                }

                sb.AppendLine("  addi t1, t1, 1"); // increment array index
                sb.AppendLine("  slt s0, t1, a2"); // 1 if within range
                sb.AppendLine("  mul t1, t1, s0"); // multiply by 1 if within range, 0 otherwise

                // decrement iteration count
                sb.AppendLine("  addi a0, a0, -1");
                sb.AppendLine($"  bne a0, x0, {loopLabel}");
                sb.AppendLine("  mv a0, t6");
                sb.AppendLine("  ld s0, (sp)");
                sb.AppendLine("  addi sp, sp, 16");
                sb.AppendLine("  ret");
            }
        }

        public void GenerateTestBlock(StringBuilder sb, IUarchTest.ISA isa)
        {
            sb.AppendLine("  if (argc > 1 && strcmp(test_name, \"" + Prefix + "\") == 0) {");
            sb.AppendLine("    printf(\"" + Description + ":\\n\");");
            GenerateCommonTestBlock(sb);
            sb.AppendLine("  }\n");
        }

        public void GenerateAsmGlobalLines(StringBuilder sb)
        {
            for (int i = 0; i < branchCounts.Length; i++)
                sb.AppendLine(".global " + Prefix + branchCounts[i]);
        }

        // kinda hack this to put in initialization code we need
        public void GenerateExternLines(StringBuilder sb)
        {
            for (int i = 0; i < branchCounts.Length; i++)
                sb.AppendLine("extern uint64_t " + Prefix + branchCounts[i] + $"({FunctionDefinitionParameters}) __attribute((sysv_abi));");

            GenerateInitializationCode(sb, true);

            string gccFunction = File.ReadAllText(Path.Combine(Program.DataFilesDir, "GccBranchHistFunction.c"));
            sb.AppendLine(gccFunction);
        }

        public void GenerateInitializationCode(StringBuilder sb, bool gcc)
        {
            sb.AppendLine($"uint32_t maxBranchCount = {branchCounts.Length};");
            sb.Append($"uint32_t branchCounts[{branchCounts.Length}] = ");
            sb.Append("{  " + branchCounts[0]);
            for (int i = 1; i < branchCounts.Length; i++) sb.Append(", " + branchCounts[i]);
            sb.AppendLine(" };");
            sb.Append($"uint32_t branchHistoryLengths[{historyCounts.Length}] = ");
            sb.Append("{  " + historyCounts[0]);
            for (int i = 1; i < historyCounts.Length; i++) sb.Append(", " + historyCounts[i]);
            sb.AppendLine(" };");

            if (gcc) sb.AppendLine($"uint64_t (__attribute((sysv_abi)) *branchtestFuncArr[{branchCounts.Length}])(uint64_t iterations, uint32_t **arr, uint32_t arrLen);");
            else sb.AppendLine($"uint64_t (*branchtestFuncArr[{branchCounts.Length}])(uint64_t iterations, uint32_t **arr, uint32_t arrLen);");

            sb.AppendLine("void initializeBranchHistFuncArr() {");
            for (int i = 0; i < branchCounts.Length; i++)
            {
                sb.AppendLine($"  branchtestFuncArr[{i}] = {Prefix + branchCounts[i]};");
            }

            sb.AppendLine("}");
        }

        public void GenerateCommonTestBlock(StringBuilder sb)
        {
            string branchhistMain = File.ReadAllText(Path.Combine(Program.DataFilesDir, "BranchhistTestBlock.c"));
            sb.AppendLine(branchhistMain);
        }
    }
}


================================================
FILE: AsmGen/tests/BtbTest.cs
================================================
using System;
using System.Text;

namespace AsmGen
{
    public class BtbTest : UarchTest
    {
        private int spacing;
        private BranchType branchType;
        private bool varyspacing;

        public override bool SupportsIsa(IUarchTest.ISA isa)
        {
            if (isa == IUarchTest.ISA.amd64) return true;
            if (isa == IUarchTest.ISA.aarch64) return true;
            if (isa == IUarchTest.ISA.mips64) return true;
            if (isa == IUarchTest.ISA.riscv) return true;
            return false;
        }

        public enum BranchType
        {
            /// <summary>
            /// Conditional branches that are always taken
            /// </summary>
            Conditional,

            /// <summary>
            /// Unconditional jmps
            /// </summary>
            Unconditional,

            /// <summary>
            /// A mix of both to max out Zen 2's BTB capacity
            /// Optimization guide says one entry can track two branches if they're in the same 64B line
            /// and the first is conditional
            /// </summary>
            ZenMix
        }

        /// <summary>
        /// Constructor for BTB test
        /// </summary>
        /// <param name="spacing">How far apart branches should be. Valid values are 4, 8, 16</param>
        /// <param name="conditional">If true, use conditional branches (still always taken)</param>
        public BtbTest(int spacing, BranchType branchType, bool varyspacing = false)
        {
            this.Counts = new int[] { 1, 2, 4, 8, 16, 32, 48, 56, 64, 128, 256, 512, 768, 1024, 1536, 2048,
                3072, 4096, 4608, 5120, 6144, 7168, 8192, 10240, 12288, 14336, 16384, 20480, 24576, 28672, 32768, 40960, 49152 };
            this.Prefix = "btb" + spacing + (varyspacing ? "v" : "") + branchType;
            this.Description = $"Branch Target Buffer, " + branchType + $" branch every {spacing} bytes " + (varyspacing ? " (varied spacing)" : "");
            this.FunctionDefinitionParameters = "uint64_t iterations";
            this.GetFunctionCallParameters = "structIterations";
            this.DivideTimeByCount = true;
            this.spacing = spacing;
            this.branchType = branchType;
            this.varyspacing = varyspacing;
        }

        private string GetBranchFuncName(int branchCount) { return Prefix + branchCount; }
        public string GetLabelName(string funcName, int part) { return funcName + "part" + part; }

        public override void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)
        {
            if (isa == IUarchTest.ISA.amd64)
            {
                GenerateX86GccAsm(sb);
            }
            else if (isa == IUarchTest.ISA.aarch64)
            {
                GenerateArmAsm(sb);
            }
            else if (isa == IUarchTest.ISA.mips64)
            {
                GenerateMipsAsm(sb);
            }
            else if (isa == IUarchTest.ISA.riscv)
            {
                GenerateRiscvAsm(sb);
            }
        }

        public void GenerateX86GccAsm(StringBuilder sb)
        {
            string paddingAlign = "  .align " + spacing;
            int spacingNops = 0;
            for (int i = 0; i < Counts.Length; i++)
            {
                string funcName = GetBranchFuncName(Counts[i]);
                //sb.AppendLine("; Start of function for branch count " + branchCounts[i] + " padding " + paddings[p]);
                sb.AppendLine(funcName + ":\n");
                sb.AppendLine("  xor %rax, %rax");

                if (branchType == BranchType.ZenMix) sb.AppendLine("  .align 64");
                for (int branchIdx = 1; branchIdx < Counts[i]; branchIdx++)
                {
                    string labelName = GetLabelName(funcName, branchIdx);

                    if (branchType == BranchType.Conditional)
                    {
                        sb.AppendLine("  test %rax, %rax");
                        sb.AppendLine("  jz " + labelName); // should always be set
                    }
                    else if (branchType == BranchType.Unconditional)
                    {
                        sb.AppendLine("  jmp " + labelName);
                    }
                    else if (branchType == BranchType.ZenMix)
                    {
                        if ((branchIdx & 0x1) == 0)
                        {
                            sb.AppendLine("  jmp " + labelName);
                        }
                        else
                        {
                            sb.AppendLine("  test %rax, %rax");
                            sb.AppendLine("  jz " + labelName);
                        }
                    }

                    sb.AppendLine(paddingAlign);

                    if (varyspacing)
                    {
                        for (int nopIdx = 0; nopIdx < spacingNops; nopIdx++)
                        {
                            sb.AppendLine("  nop");
                        }
                        spacingNops++;
                        if (spacingNops > 6) spacingNops = 0;
                    }

                    sb.AppendLine(labelName + ":");
                }

                sb.AppendLine("  dec %rdi");
                sb.AppendLine("  jne " + funcName);
                sb.AppendLine("  ret\n\n");

                // don't let it get too close to the next branch
                sb.AppendLine(paddingAlign);
            }
        }

        private string Get4BNopAlign()
        {
            string paddingAlign = "";
            if (spacing == 8)
            {
                paddingAlign = "  nop";
            }
            else if (spacing == 16)
            {
                paddingAlign = "  nop\n  nop\n  nop";
            }
            else if (spacing == 32)
            {
                paddingAlign = "  nop\n  nop\n  nop\n  nop\n  nop\n  nop\n  nop";
            }
            else if (spacing == 64)
            {
                paddingAlign = "  nop\n  nop\n  nop\n  nop\n  nop\n  nop\n  nop\n";
                paddingAlign += "  nop\n  nop\n  nop\n  nop\n  nop\n  nop\n  nop\n  nop";
            }
            else if (spacing != 4)
            {
                Console.WriteLine($"Unsupported padding value {spacing}");
                throw new NotImplementedException("Unsupported padding value");
            }

            return paddingAlign;
        }

        public void GenerateArmAsm(StringBuilder sb)
        {
            // things are 4 bytes on aarch64
            string paddingAlign = Get4BNopAlign();

            for (int i = 0; i < Counts.Length; i++)
            {
                string funcName = GetBranchFuncName(Counts[i]);
                string funcTargetName = GetBranchFuncName(Counts[i]) + "_itarget";
                sb.AppendLine(funcName + ":");
                sb.AppendLine($"  adrp x2, {funcName}");
                sb.AppendLine($"  add x2, x2, :lo12:{funcName}");
                sb.AppendLine("  mov x1, 1");
                sb.AppendLine(".align 16");
                sb.AppendLine(funcTargetName + ":");
                for (int branchIdx = 1; branchIdx < Counts[i]; branchIdx++)
                {
                    string labelName = GetLabelName(funcName, branchIdx);
                    if (branchType == BranchType.Unconditional)
                        sb.AppendLine("  b " + labelName);
                    else if (branchType == BranchType.Conditional)
                        sb.AppendLine("  cbnz x1, " + labelName); // x1 = 1 from earlier, should never be zero
                    else if (branchType == BranchType.ZenMix)
                    {
                        if ((branchIdx & 0x1) == 0) sb.AppendLine("  b " + labelName);
                        else sb.AppendLine("  cbnz x1, " + labelName);
                    }

                    sb.AppendLine(paddingAlign);
                    sb.AppendLine(labelName + ":");
                }

                sb.AppendLine(paddingAlign);
                sb.AppendLine("  sub x0, x0, 1");

                // aarch64 is a mess. try to avoid 'relocation truncated to fit' issues with an indirect branch
                if (spacing * Counts[i] >= (1024 * 1024 - 20))
                {
                    string workaroundTarget = funcName + "_aarch64_indirect_workaround";

                    // jump over indirect branch to return, on zero
                    // this branch should be not taken for all except the last iteration, and should have minimal
                    // impact on results because a predicted NT branch is sort of 'free' on most architectures
                    sb.AppendLine("  cbz x0, " + workaroundTarget);
                    sb.AppendLine("  br x2");
                    sb.AppendLine(workaroundTarget + ":");
                }
                else
                {
                    sb.AppendLine("  cbnz x0, " + funcTargetName);
                }

                sb.AppendLine("  ret\n\n");

                // don't let it get too close to the next branch
                sb.AppendLine(paddingAlign);
            }
        }

        public void GenerateMipsAsm(StringBuilder sb)
        {
            string paddingAlign = Get4BNopAlign();
            for (int i = 0; i < Counts.Length; i++)
            {
                string funcName = GetBranchFuncName(Counts[i]);
                string funcTargetName = GetBranchFuncName(Counts[i]) + "_itarget";

                sb.AppendLine(funcName + ":");
                sb.AppendLine("  xor $r12, $r12, $r12");
                sb.AppendLine("  addi.d $r12, $r12, 1");
                sb.AppendLine("  xor $r13, $r13, $r13");
                sb.AppendLine("  la $r14, " + funcTargetName);
                sb.AppendLine(funcTargetName + ":");
                for (int branchIdx = 1; branchIdx < Counts[i]; branchIdx++)
                {
                    string labelName = GetLabelName(funcName, branchIdx);
                    sb.AppendLine("  beqz $r13, " + labelName);
                    sb.AppendLine(paddingAlign);
                    sb.AppendLine(labelName + ":");
                }

                sb.AppendLine("  sub.d $r4, $r4, $r12"); // decrement iteration count

                int distance = spacing * Counts[i];
                if (distance < 1024)
                {
                    sb.AppendLine("  bnez $r4, " + funcTargetName); // short branch if we're not too far away
                }
                else
                {
                    string workaroundTarget = funcName + "_mips_indirect_workaround";
                    sb.AppendLine("  beqz $r4, " + workaroundTarget); // jump over indirect branch if iteration count is reached
                    sb.AppendLine("  jr $r14"); // jump back to target (start of loop)
                    sb.AppendLine(workaroundTarget + ":");
                }

                sb.AppendLine("  jr $r1");
            }
        }

        private string GetRiscvNopAlign()
        {
            // branch takes 16 bits (2 bytes)
            int paddingNeeded = spacing - 2;

            // each NOP is 2 bytes
            StringBuilder nopSb = new StringBuilder();
            for (int i = 0; i < paddingNeeded; i += 2)
            {
                nopSb.AppendLine("  nop");
            }

            return nopSb.ToString();
        }

        public void GenerateRiscvAsm(StringBuilder sb)
        {
            string paddingAlign = GetRiscvNopAlign();
            for (int i = 0; i < Counts.Length; i++)
            {
                string funcName = GetBranchFuncName(Counts[i]);
                string funcTargetName = GetBranchFuncName(Counts[i]) + "_itarget";

                sb.AppendLine(funcName + ":");
                sb.AppendLine("  la x5, " + funcTargetName);
                sb.AppendLine(funcTargetName + ":");
                for (int branchIdx = 1; branchIdx < Counts[i]; branchIdx++)
                {
                    string labelName = GetLabelName(funcName, branchIdx);
                    sb.AppendLine("  j " + labelName);
                    sb.AppendLine(paddingAlign);
                    sb.AppendLine(labelName + ":");
                }

                sb.AppendLine("  addi x10, x10, -1"); // decrement iteration count

                int distance = spacing * Counts[i];
                if (distance < 1024)
                {
                    sb.AppendLine("  bne x10, x0, " + funcTargetName); // short branch if we're not too far away
                }
                else
                {
                    string workaroundTarget = funcName + "_riscv_indirect_workaround";
                    sb.AppendLine("  beq x10, x0, " + workaroundTarget); // jump over indirect branch if iteration count is reached
                    sb.AppendLine("  jalr x0, x5"); // jump back to target (start of loop)
                    sb.AppendLine(workaroundTarget + ":");
                }

                sb.AppendLine("  ret");
            }
        }
    }
}


================================================
FILE: AsmGen/tests/CvtSchedTest.cs
================================================
using System.Text;

namespace AsmGen
{
    public class CvtSchedTest : UarchTest
    {
        public CvtSchedTest(int low, int high, int step)
        {
            this.Counts = UarchTestHelpers.GenerateCountArray(low, high, step);
            this.Prefix = "cvtsched";
            this.Description = "F2I Scheduler";
            this.FunctionDefinitionParameters = "uint64_t iterations, int *arr, float *floatArr";
            this.GetFunctionCallParameters = "structIterations, A, fpArr";
            this.DivideTimeByCount = false;
        }

        public override bool SupportsIsa(IUarchTest.ISA isa)
        {
            if (isa == IUarchTest.ISA.amd64) return true;
            if (isa == IUarchTest.ISA.aarch64) return true;
            // if (isa == IUarchTest.ISA.mips64) return true;
            // if (isa == IUarchTest.ISA.riscv) return true;
            return false;
        }

        public override void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)
        {
            if (isa == IUarchTest.ISA.amd64)
            {
                string[] unrolledInstrs = new string[4];
                unrolledInstrs[0] = "  cvtsi2ss %rdi, %xmm1";
                unrolledInstrs[1] = "  cvtsi2ss %rdi, %xmm2";
                unrolledInstrs[2] = "  cvtsi2ss %rdi, %xmm3";
                unrolledInstrs[3] = "  cvtsi2ss %rdi, %xmm4";

                string[] unrolledInstrs1 = new string[4];
                unrolledInstrs1[0] = "  cvtsi2ss %rsi, %xmm1";
                unrolledInstrs1[1] = "  cvtsi2ss %rsi, %xmm2";
                unrolledInstrs1[2] = "  cvtsi2ss %rsi, %xmm3";
                unrolledInstrs1[3] = "  cvtsi2ss %rsi, %xmm4";

                UarchTestHelpers.GenerateX86AsmStructureTestFuncs(sb, this.Counts, this.Prefix, unrolledInstrs, unrolledInstrs1);
            }
            else if (isa == IUarchTest.ISA.aarch64)
            {
                string[] unrolledInstrs = new string[4];
                unrolledInstrs[0] = "  scvtf s0, w25";
                unrolledInstrs[1] = "  scvtf s1, w25";
                unrolledInstrs[2] = "  scvtf s2, w25";
                unrolledInstrs[3] = "  scvtf s3, w25";

                string[] unrolledInstrs1 = new string[4];
                unrolledInstrs1[0] = "  scvtf s0, w26";
                unrolledInstrs1[1] = "  scvtf s1, w26";
                unrolledInstrs1[2] = "  scvtf s2, w26";
                unrolledInstrs1[3] = "  scvtf s3, w26";

                UarchTestHelpers.GenerateArmAsmStructureTestFuncs(sb, this.Counts, this.Prefix, unrolledInstrs, unrolledInstrs1);
            }
            else if (isa == IUarchTest.ISA.mips64)
            {
                
            }
            else if (isa == IUarchTest.ISA.riscv)
            {
                
            }
        }
    }
}


================================================
FILE: AsmGen/tests/FAdd256RfTest.cs
================================================
using System.Text;

namespace AsmGen
{
    public class Fadd256RfTest : UarchTest
    {
        public enum TestMode
        {
            none,
            setavx512regs,
            pendingavx512instr
        }
        private bool populateAvx512Regs;
        private bool pendingAvx512Instr;
        public Fadd256RfTest(int low, int high, int step, TestMode mode)
        {
            this.Counts = UarchTestHelpers.GenerateCountArray(low, high, step);
            this.Prefix = "fadd256rf" + mode;
            this.Description = "256-bit FP/vector RF capacity, " + mode;
            this.FunctionDefinitionParameters = "uint64_t iterations, int *arr, float *floatArr";
            this.GetFunctionCallParameters = "structIterations, A, fpArr";
            this.DivideTimeByCount = false;
            if (mode == TestMode.setavx512regs) populateAvx512Regs = true;
            else if (mode == TestMode.pendingavx512instr) pendingAvx512Instr = true;
        }

        public override bool SupportsIsa(IUarchTest.ISA isa)
        {
            if (isa == IUarchTest.ISA.amd64) return true;
            if (isa == IUarchTest.ISA.aarch64) return false;
            if (isa == IUarchTest.ISA.mips64) return true;
            return false;
        }

        public override void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)
        {
            if (isa == IUarchTest.ISA.amd64)
            {
                string initInstrs = "  vmovups (%r8), %ymm0\n" +
                 "  vmovups %ymm0, %ymm1\n" +
                 "  vmovups %ymm0, %ymm2\n" +
                 "  vmovups %ymm0, %ymm3\n" +
                 "  vmovups %ymm0, %ymm4\n";

                if (this.populateAvx512Regs)
                {
                    for (int i = 5; i < 32; i++)
                    {
                        initInstrs += "  vmovups 64(%r8), %zmm" + i + "\n";
                    }
                }

                string postLoadInstr = string.Empty;

                if (this.pendingAvx512Instr)
                {
                    initInstrs += "  vmovups 64(%r8), %zmm5\n  vmovups 128(%r8), %zmm6\n";
                    postLoadInstr = "  vaddps %zmm5, %zmm6, %zmm6";
                }

                string[] unrolledAdds = new string[4];
                unrolledAdds[0] = "  vaddps %ymm0, %ymm1, %ymm1";
                unrolledAdds[1] = "  vaddps %ymm0, %ymm2, %ymm2";
                unrolledAdds[2] = "  vaddps %ymm0, %ymm3, %ymm3";
                unrolledAdds[3] = "  vaddps %ymm0, %ymm4, %ymm3";

                UarchTestHelpers.GenerateX86AsmStructureTestFuncs(sb, this.Counts, this.Prefix, unrolledAdds, unrolledAdds, initInstrs: initInstrs, postLoadInstrs1: postLoadInstr, postLoadInstrs2: postLoadInstr);
            }
            else if (isa == IUarchTest.ISA.aarch64)
            {
                
            }
            else if (isa == IUarchTest.ISA.mips64)
            {
                string initInstrs = "";
                for (int regIdx = 0; regIdx < 32; regIdx++)
                {
                    initInstrs += "  xvld $xr" + regIdx + ", $r6, " + regIdx * 32 + "\n";
                }

                string[] unrolledAdds = new string[4];
                unrolledAdds[0] = "  xvfadd.s $xr1, $xr1, $xr1";
                unrolledAdds[1] = "  xvfadd.s $xr2, $xr2, $xr2";
                unrolledAdds[2] = "  xvfadd.s $xr3, $xr3, $xr3";
                unrolledAdds[3] = "  xvfadd.s $xr4, $xr4, $xr4";
                UarchTestHelpers.GenerateMipsAsmStructureTestFuncs(
                    sb, this.Counts, this.Prefix, unrolledAdds, unrolledAdds, includePtrChasingLoads: false, initInstrs: initInstrs);
            }
        }
    }
}


================================================
FILE: AsmGen/tests/Fadd128RfTest.cs
================================================
using System.Collections.Generic;
using System.Text;

namespace AsmGen
{
    public class Fadd128RfTest : UarchTest
    {
        private bool initialDependentBranch;
        public Fadd128RfTest(int low, int high, int step, bool initialDependentBranch)
        {
            this.Counts = UarchTestHelpers.GenerateCountArray(low, high, step);
            this.Prefix = "fadd128rf" + (initialDependentBranch ? "db" : string.Empty);
            this.Description = "128-bit FP/vector RF capacity" + (initialDependentBranch ? ", preceded by dependent branch" : string.Empty);
            this.FunctionDefinitionParameters = "uint64_t iterations, int *arr, float *floatArr";
            this.GetFunctionCallParameters = "structIterations, A, fpArr";
            this.DivideTimeByCount = false;
            this.initialDependentBranch = initialDependentBranch;
        }

        public override bool SupportsIsa(IUarchTest.ISA isa)
        {
            if (this.initialDependentBranch)
            {
                if (isa == IUarchTest.ISA.aarch64) return true;
                if (isa == IUarchTest.ISA.riscv) return true;
                return false;
            }

            if (isa == IUarchTest.ISA.amd64) return true;
            if (isa == IUarchTest.ISA.aarch64) return true;
            if (isa == IUarchTest.ISA.mips64) return false;
            return false;
        }

        public override void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)
        {
            if (isa == IUarchTest.ISA.amd64)
            {
                string initInstrs = "  vmovups (%r8), %ymm0\n";

                for (int i = 1; i < 16; i++) initInstrs += $"  vmovups %ymm0, %ymm{i}\n";

                List<string> unrolledAddsList = new List<string>();
                for (int i = 1; i < 16; i++) unrolledAddsList.Add($"  vaddps %ymm0, %ymm{i}, %ymm{i}");
                string[] unrolledAdds = unrolledAddsList.ToArray();

                UarchTestHelpers.GenerateX86AsmStructureTestFuncs(sb, this.Counts, this.Prefix, unrolledAdds, unrolledAdds, initInstrs: initInstrs);
            }
            else if (isa == IUarchTest.ISA.aarch64)
            {
                string postLoadInstrs = this.initialDependentBranch ? UarchTestHelpers.GetArmDependentBranch(this.Prefix) : null;
                string initInstrs = "  ldr q0, [x1]\n" +
                "  ldr q1, [x1, #0x10]\n" +
                "  ldr q2, [x1, #0x20]\n" +
                "  ldr q3, [x1, #0x30]\n" +
                "  ldr q4, [x1, #0x40]\n";

                string[] unrolledAdds = new string[4];
                unrolledAdds[0] = "  add v1.4s, v1.4s, v0.4s";
                unrolledAdds[1] = "  add v2.4s, v2.4s, v0.4s";
                unrolledAdds[2] = "  add v3.4s, v3.4s, v0.4s";
                unrolledAdds[3] = "  add v4.4s, v4.4s, v0.4s";
                UarchTestHelpers.GenerateArmAsmStructureTestFuncs(
                    sb, this.Counts, this.Prefix, unrolledAdds, unrolledAdds, false, initInstrs, postLoadInstrs1: postLoadInstrs, postLoadInstrs2: postLoadInstrs);
                if (this.initialDependentBranch) sb.AppendLine(UarchTestHelpers.GetArmDependentBranchTarget(this.Prefix));
            }
            else if (isa == IUarchTest.ISA.riscv)
            {
                string initInstrs = "  vsetvli t5, t6, e32\n  vlw.v v0, (a1)\n  vlw.v v1, (a1)\n  vlw.v v2, (a1)\n  vlw.v v3, (a1)";
                string postLoadInstrs = this.initialDependentBranch ? UarchTestHelpers.GetRiscvDependentBranch(this.Prefix) : string.Empty;
                postLoadInstrs += "\n  mv t6, a2";
                string[] unrolledInstrs = new string[1];
                unrolledInstrs[0] = "  vfadd.vv v0, v0, v0";
                UarchTestHelpers.GenerateRiscvAsmStructureTestFuncs(sb, this.Counts, this.Prefix, unrolledInstrs, unrolledInstrs, false,
                    initInstrs: initInstrs, postLoadInstrs1: postLoadInstrs, postLoadInstrs2: postLoadInstrs);
                if (this.initialDependentBranch) sb.AppendLine(UarchTestHelpers.GetRiscvDependentBranchTarget(this.Prefix));
            }
        }
    }
}


================================================
FILE: AsmGen/tests/Fadd128SchedTest.cs
================================================
using System.Text;

namespace AsmGen
{
    public class Fadd128SchedTest : UarchTest
    {
        public Fadd128SchedTest(int low, int high, int step)
        {
            this.Counts = UarchTestHelpers.GenerateCountArray(low, high, step);
            this.Prefix = "fadd128sched";
            this.Description = "128-bit Vector FP Add Scheduler";
            this.FunctionDefinitionParameters = "uint64_t iterations, int *arr, float *floatArr";
            this.GetFunctionCallParameters = "structIterations, A, fpArr";
            this.DivideTimeByCount = false;
        }

        public override bool SupportsIsa(IUarchTest.ISA isa)
        {
            if (isa == IUarchTest.ISA.amd64) return true;
            if (isa == IUarchTest.ISA.aarch64) return true;
            return false;
        }

        public override void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)
        {
            if (isa == IUarchTest.ISA.amd64)
            {
                string[] unrolledAdds = new string[4];
                unrolledAdds[0] = "  addps %xmm0, %xmm1";
                unrolledAdds[1] = "  addps %xmm0, %xmm2";
                unrolledAdds[2] = "  addps %xmm0, %xmm3";
                unrolledAdds[3] = "  addps %xmm0, %xmm4";

                UarchTestHelpers.GenerateX86AsmFpSchedTestFuncs(sb, this.Counts, this.Prefix, unrolledAdds, unrolledAdds);
            }
            else if (isa == IUarchTest.ISA.aarch64)
            {
                string postLoadInstrs1 = "  ldr q0, [x2, w25, uxtw#0]";
                string postLoadInstrs2 = "  ldr q0, [x2, w26, uxtw#0]";
                string[] unrolledAdds = new string[4];
                unrolledAdds[0] = "  add v1.4s, v1.4s, v0.4s";
                unrolledAdds[1] = "  add v2.4s, v2.4s, v0.4s";
                unrolledAdds[2] = "  add v3.4s, v3.4s, v0.4s";
                unrolledAdds[3] = "  add v4.4s, v4.4s, v0.4s";
                UarchTestHelpers.GenerateArmAsmStructureTestFuncs(sb, this.Counts, this.Prefix, unrolledAdds, unrolledAdds, false, null, postLoadInstrs1, postLoadInstrs2);
            }
        }
    }
}


================================================
FILE: AsmGen/tests/Fadd256SchedTest.cs
================================================
using System.Text;

namespace AsmGen
{
    public class Fadd256SchedTest : UarchTest
    {
        public Fadd256SchedTest(int low, int high, int step)
        {
            this.Counts = UarchTestHelpers.GenerateCountArray(low, high, step);
            this.Prefix = "fadd256sched";
            this.Description = "256-bit FP add scheduler";
            this.FunctionDefinitionParameters = "uint64_t iterations, int *arr, float *floatArr";
            this.GetFunctionCallParameters = "structIterations, A, fpArr";
            this.DivideTimeByCount = false;
        }

        public override bool SupportsIsa(IUarchTest.ISA isa)
        {
            if (isa == IUarchTest.ISA.amd64) return true;
            if (isa == IUarchTest.ISA.aarch64) return false;
            if (isa == IUarchTest.ISA.mips64) return true;
            return false;
        }

        public override void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)
        {
            if (isa == IUarchTest.ISA.amd64)
            {
                // ymm0 is dependent on ptr chasing load
                string[] unrolledAdds = new string[4];
                unrolledAdds[0] = "  vaddps %ymm0, %ymm1, %ymm1";
                unrolledAdds[1] = "  vaddps %ymm0, %ymm2, %ymm2";
                unrolledAdds[2] = "  vaddps %ymm0, %ymm3, %ymm3";
                unrolledAdds[3] = "  vaddps %ymm0, %ymm4, %ymm3";

                UarchTestHelpers.GenerateX86AsmFp256SchedTestFuncs(sb, this.Counts, this.Prefix, unrolledAdds, unrolledAdds);
            }
            else if (isa == IUarchTest.ISA.aarch64)
            {
                
            }
            else if (isa == IUarchTest.ISA.mips64)
            {
                string initInstrs = "";
                for (int regIdx = 0; regIdx < 32; regIdx++)
                {
                    initInstrs += "  xvld $xr" + regIdx + ", $r6, " + regIdx * 32 + "\n";
                }
                initInstrs += "  move $r16, $r0\n  addi.d $r16, $r16, 0xF"; // load mask into r16

                string postLoadInstrs1 = "  and $r15, $r12, $r16\n  xvldx $xr1, $r6, $r15";
                string postLoadInstrs2 = "  and $r15, $r13, $r16\n  xvldx $xr1, $r6, $r15";

                string[] unrolledAdds = new string[4];
                unrolledAdds[0] = "  xvfadd.s $xr2, $xr2, $xr1";
                unrolledAdds[1] = "  xvfadd.s $xr3, $xr3, $xr1";
                unrolledAdds[2] = "  xvfadd.s $xr4, $xr4, $xr1";
                unrolledAdds[3] = "  xvfadd.s $xr5, $xr5, $xr1";
                UarchTestHelpers.GenerateMipsAsmStructureTestFuncs(
                    sb, this.Counts, this.Prefix, unrolledAdds, unrolledAdds, includePtrChasingLoads: false, initInstrs: initInstrs,
                    postLoadInstrs1: postLoadInstrs1, postLoadInstrs2: postLoadInstrs2);
            }
        }
    }
}


================================================
FILE: AsmGen/tests/FaddNsq.cs
================================================
using System.Text;

namespace AsmGen
{
    public class FaddNsq : UarchTest
    {
        private int totalOps;
        public FaddNsq(int low, int high, int step, int totalOps)
        {
            this.Counts = UarchTestHelpers.GenerateCountArray(low, high, step);
            this.Prefix = "faddnsq" + totalOps;
            this.Description = "FADD, excluding possible NSQ";
            this.FunctionDefinitionParameters = "uint64_t iterations, int *arr, float *floatArr";
            this.GetFunctionCallParameters = "structIterations, A, fpArr";
            this.DivideTimeByCount = false;
            this.totalOps = totalOps;
        }

        public override bool SupportsIsa(IUarchTest.ISA isa)
        {
            if (isa == IUarchTest.ISA.aarch64) return true;
            if (isa == IUarchTest.ISA.amd64) return true;
            return false;
        }

        public override void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)
        {
            if (isa == IUarchTest.ISA.amd64)
            {
                string postLoadInstrs = "  cvtsi2ss %edi, %xmm1";
                string initInstrs = "  cvtsi2ss %r12, %xmm2";
                string[] depInstrs = new string[4];
                depInstrs[0] = "  addss %xmm1, %xmm0";
                depInstrs[1] = "  addss %xmm1, %xmm3";
                depInstrs[2] = "  addss %xmm1, %xmm4";
                depInstrs[3] = "  addss %xmm1, %xmm5";

                string[] indepInstrs = new string[2];
                indepInstrs[0] = "  addss %xmm2, %xmm6";
                indepInstrs[1] = "  addss %xmm2, %xmm7";
                UarchTestHelpers.GenerateX86AsmNsqTestFuncs(sb, this.totalOps, this.Counts, this.Prefix, depInstrs, indepInstrs, false, initInstrs, postLoadInstrs);
            }
            else if (isa == IUarchTest.ISA.aarch64)
            {
                string postLoadInstrs1 = "  ldr s16, [x2, w25, uxtw #2]";
                string initInstrs = "  ldr s15, [x2]";
                string[] depInstrs = new string[4];
                depInstrs[0] = "  fadd s0, s0, s16";
                depInstrs[1] = "  fadd s1, s1, s16";
                depInstrs[2] = "  fadd s2, s2, s16";
                depInstrs[3] = "  fadd s3, s3, s16";

                string[] indepInstrs = new string[4];
                indepInstrs[0] = "  fadd s17, s17, s15";
                indepInstrs[1] = "  fadd s18, s18, s15";
                indepInstrs[2] = "  fadd s19, s19, s15";
                indepInstrs[3] = "  fadd s20, s20, s15";
                UarchTestHelpers.GenerateArmAsmNsqTestFuncs(sb, this.totalOps, this.Counts, this.Prefix, depInstrs, indepInstrs, false, initInstrs,
                    postLoadInstrs: postLoadInstrs1);
            }
        }
    }
}


================================================
FILE: AsmGen/tests/FaddSchedTest.cs
================================================
using System.Text;

namespace AsmGen
{
    public class FaddSchedTest : UarchTest
    {
        public FaddSchedTest(int low, int high, int step)
        {
            this.Counts = UarchTestHelpers.GenerateCountArray(low, high, step);
            this.Prefix = "faddsched";
            this.Description = "FP Add Scheduler";
            this.FunctionDefinitionParameters = "uint64_t iterations, int *arr, float *floatArr";
            this.GetFunctionCallParameters = "structIterations, A, fpArr";
            this.DivideTimeByCount = false;
        }

        public override bool SupportsIsa(IUarchTest.ISA isa)
        {
            if (isa == IUarchTest.ISA.amd64) return true;
            if (isa == IUarchTest.ISA.aarch64) return true;
            if (isa == IUarchTest.ISA.mips64) return true;
            if (isa == IUarchTest.ISA.riscv) return true;
            return false;
        }

        public override void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)
        {
            if (isa == IUarchTest.ISA.amd64)
            {
                string[] unrolledAdds = new string[4];
                unrolledAdds[0] = "  addss %xmm0, %xmm1";
                unrolledAdds[1] = "  addss %xmm0, %xmm2";
                unrolledAdds[2] = "  addss %xmm0, %xmm3";
                unrolledAdds[3] = "  addss %xmm0, %xmm4";

                UarchTestHelpers.GenerateX86AsmFpSchedTestFuncs(sb, this.Counts, this.Prefix, unrolledAdds, unrolledAdds);
            }
            else if (isa == IUarchTest.ISA.aarch64)
            {
                string[] unrolledAdds = new string[4];
                unrolledAdds[0] = "  fadd s17, s17, s16";
                unrolledAdds[1] = "  fadd s18, s18, s16";
                unrolledAdds[2] = "  fadd s19, s19, s16";
                unrolledAdds[3] = "  fadd s20, s20, s16";
                UarchTestHelpers.GenerateArmAsmFpSchedTestFuncs(sb, this.Counts, this.Prefix, unrolledAdds, unrolledAdds);
            }
            else if (isa == IUarchTest.ISA.mips64)
            {
                string initInstrs = "  fld.s $f8, $r6, 0\n" +
                    "  fld.s $f9, $r6, 4\n" +
                    "  fld.s $f10, $r6, 8\n" +
                    "  fld.s $f11, $r6, 12\n" +
                    "  fld.s $f12, $r6, 16\n";

                string postLoadInstrs1 = "  andi $r19, $r12, 0xF\n  add.d $r19, $r19, $r6\n fld.s $f8, $r19, 0";
                string[] dependentAdds = new string[4];
                dependentAdds[0] = "  fadd.s $f9, $f9, $f8";
                dependentAdds[1] = "  fadd.s $f10, $f10, $f8";
                dependentAdds[2] = "  fadd.s $f11, $f11, $f8";
                dependentAdds[3] = "  fadd.s $f12, $f12, $f8";

                string postLoadInstrs2 = "  andi $r19, $r13, 0xF\n  add.d $r19, $r19, $r6\n fld.s $f8, $r19, 0";
                UarchTestHelpers.GenerateMipsAsmStructureTestFuncs(
                    sb, this.Counts, this.Prefix, dependentAdds, dependentAdds, includePtrChasingLoads: false, initInstrs: initInstrs, 
                    postLoadInstrs1: postLoadInstrs1, postLoadInstrs2: postLoadInstrs2);
            }
            else if (isa == IUarchTest.ISA.riscv)
            {
                string initInstrs = "  fld f0, (x12)\n" +
                    "  fld f1, 8(x12)\n" +
                    "  fld f2, 16(x12)\n" +
                    "  fld f3, 24(x12)\n" +
                    "  fld f4, 32(x12)\n";

                string[] unrolledAdds = new string[4];
                unrolledAdds[0] = "  fadd.s f0, f0, f4";
                unrolledAdds[1] = "  fadd.s f1, f1, f4";
                unrolledAdds[2] = "  fadd.s f2, f2, f4";
                unrolledAdds[3] = "  fadd.s f3, f3, f4";

                string postLoadInstrs1 = "  andi x7, x5, 0xF\n  add x7, x7, x12\n  fld f4, (x7)";
                string postLoadInstrs2 = "  andi x7, x6, 0xF\n  add x7, x7, x12\n  fld f4, (x7)";
                UarchTestHelpers.GenerateRiscvAsmStructureTestFuncs(sb, this.Counts, this.Prefix, unrolledAdds, unrolledAdds, includePtrChasingLoads: false,
                    initInstrs, postLoadInstrs1, postLoadInstrs2);
            }
        }
    }
}


================================================
FILE: AsmGen/tests/FcmpSchedTest.cs
================================================
using System.Text;

namespace AsmGen
{
    public class FcmpSchedTest : UarchTest
    {
        public FcmpSchedTest(int low, int high, int step)
        {
            this.Counts = UarchTestHelpers.GenerateCountArray(low, high, step);
            this.Prefix = "fcmpsched";
            this.Description = "FCMP Scheduler";
            this.FunctionDefinitionParameters = "uint64_t iterations, int *arr, float *floatArr";
            this.GetFunctionCallParameters = "structIterations, A, fpArr";
            this.DivideTimeByCount = false;
        }

        public override bool SupportsIsa(IUarchTest.ISA isa)
        {
            if (isa == IUarchTest.ISA.aarch64) return true;
            return false;
        }

        public override void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)
        {
            if (isa == IUarchTest.ISA.aarch64)
            {
                string[] unrolledAdds = new string[4];
                unrolledAdds[0] = "  fcmp s17, s16";
                unrolledAdds[1] = "  fcmp s19, s16";
                unrolledAdds[2] = "  fcmp s19, s16";
                unrolledAdds[3] = "  fcmp s20, s16";
                UarchTestHelpers.GenerateArmAsmFpSchedTestFuncs(sb, this.Counts, this.Prefix, unrolledAdds, unrolledAdds);
            }
        }
    }
}


================================================
FILE: AsmGen/tests/FlagRfTest.cs
================================================
using System.Text;

namespace AsmGen
{
    public class FlagRfTest : UarchTest
    {
        private bool initialDependentBranch;
        public FlagRfTest(int low, int high, int step, bool initialDependentBranch)
        {
            this.Counts = UarchTestHelpers.GenerateCountArray(low, high, step);
            this.Prefix = "flagrf" + (initialDependentBranch ? "db" : string.Empty);
            this.Description = "Flags Register File" + (initialDependentBranch ? ", preceded by dependent branch" : string.Empty);
            this.FunctionDefinitionParameters = "uint64_t iterations, int *arr";
            this.GetFunctionCallParameters = "structIterations, A";
            this.DivideTimeByCount = false;
            this.initialDependentBranch = initialDependentBranch;
        }

        public override bool SupportsIsa(IUarchTest.ISA isa)
        {
            if (this.initialDependentBranch && isa != IUarchTest.ISA.aarch64) return false;
            if (isa == IUarchTest.ISA.amd64) return true;
            if (isa == IUarchTest.ISA.aarch64) return true;
            if (isa == IUarchTest.ISA.mips64) return false;
            return false;
        }

        public override void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)
        {
            if (isa == IUarchTest.ISA.amd64)
            {
                string[] unrolledAdds = new string[1];
                unrolledAdds[0] = "  test %r15, %r14";
                UarchTestHelpers.GenerateX86AsmStructureTestFuncs(sb, this.Counts, this.Prefix, unrolledAdds, unrolledAdds, includePtrChasingLoads: true);
            }
            else if (isa == IUarchTest.ISA.aarch64)
            {
                string postLoadInstrs = this.initialDependentBranch ? UarchTestHelpers.GetArmDependentBranch(this.Prefix) : null;
                string[] unrolledAdds = new string[1];
                unrolledAdds[0] = "  cmp x14, x15";
                UarchTestHelpers.GenerateArmAsmStructureTestFuncs(
                    sb, this.Counts, this.Prefix, unrolledAdds, unrolledAdds, includePtrChasingLoads: true, postLoadInstrs1: postLoadInstrs, postLoadInstrs2: postLoadInstrs);
                if (this.initialDependentBranch) sb.AppendLine(UarchTestHelpers.GetArmDependentBranchTarget(this.Prefix));
            }
        }
    }
}


================================================
FILE: AsmGen/tests/Fma256SchedTest.cs
================================================
using System.Text;

namespace AsmGen
{
    public class Fma256SchedTest : UarchTest
    {
        public Fma256SchedTest(int low, int high, int step)
        {
            this.Counts = UarchTestHelpers.GenerateCountArray(low, high, step);
            this.Prefix = "fma256sched";
            this.Description = "256-bit FP add scheduler";
            this.FunctionDefinitionParameters = "uint64_t iterations, int *arr, float *floatArr";
            this.GetFunctionCallParameters = "structIterations, A, fpArr";
            this.DivideTimeByCount = false;
        }

        public override bool SupportsIsa(IUarchTest.ISA isa)
        {
            if (isa == IUarchTest.ISA.amd64) return false;
            if (isa == IUarchTest.ISA.aarch64) return false;
            if (isa == IUarchTest.ISA.mips64) return true;
            return false;
        }

        public override void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)
        {
            if (isa == IUarchTest.ISA.amd64)
            {
                // ymm0 is dependent on ptr chasing load
                string[] unrolledAdds = new string[4];
                unrolledAdds[0] = "  vaddps %ymm0, %ymm1, %ymm1";
                unrolledAdds[1] = "  vaddps %ymm0, %ymm
Download .txt
gitextract_nqotrkr3/

├── .github/
│   └── workflows/
│       └── linux.yaml
├── .gitignore
├── AsmGen/
│   ├── AsmGen.csproj
│   ├── AsmGen.sln
│   ├── DataFiles/
│   │   ├── BranchhistTestBlock.c
│   │   ├── CommonFunctions.c
│   │   ├── GccBranchHistFunction.c
│   │   ├── GccIndirectBranchFunction.c
│   │   ├── IndirectBranchTestBlock.c
│   │   └── clammicrobench.vcxproj_template
│   ├── IUarchTest.cs
│   ├── Program.cs
│   ├── Properties/
│   │   └── launchSettings.json
│   ├── README.md
│   ├── UarchTest.cs
│   ├── UarchTestHelpers.cs
│   └── tests/
│       ├── A73RobTest.cs
│       ├── AddLoopTest.cs
│       ├── AddNsq.cs
│       ├── AddSchedTest.cs
│       ├── AddvNsq.cs
│       ├── AddvSchedTest.cs
│       ├── AeseSchedTest.cs
│       ├── AesencNsq.cs
│       ├── BranchBufferTest.cs
│       ├── BranchHistoryTest.cs
│       ├── BtbTest.cs
│       ├── CvtSchedTest.cs
│       ├── FAdd256RfTest.cs
│       ├── Fadd128RfTest.cs
│       ├── Fadd128SchedTest.cs
│       ├── Fadd256SchedTest.cs
│       ├── FaddNsq.cs
│       ├── FaddSchedTest.cs
│       ├── FcmpSchedTest.cs
│       ├── FlagRfTest.cs
│       ├── Fma256SchedTest.cs
│       ├── FmovSched.cs
│       ├── FmulSchedTest.cs
│       ├── FpRfTest.cs
│       ├── FpStoreDataNsq.cs
│       ├── IdrfTest.cs
│       ├── IndirectBranchTest.cs
│       ├── IntRfDepStoreTest.cs
│       ├── IntRfTest.cs
│       ├── JsCvtNsq.cs
│       ├── JsCvtSched.cs
│       ├── JumpNsqTest.cs
│       ├── JumpSchedTest.cs
│       ├── LdqTest.cs
│       ├── LeaSchedTest.cs
│       ├── LoadNsq.cs
│       ├── LoadSchedTest.cs
│       ├── MaddSchedTest.cs
│       ├── MaskRfTest.cs
│       ├── MixAddJumpSched.cs
│       ├── MixAddvJsCvtNsq.cs
│       ├── MixAddvJsCvtSched.cs
│       ├── MixBranchStoreTest.cs
│       ├── MixFAdd256and32RfTest.cs
│       ├── MixFpRfDepBranchTest.cs
│       ├── MixFpVecRfTest.cs
│       ├── MixIntRfDepBranchTest.cs
│       ├── MixIntVec128RfTest.cs
│       ├── MixIntrfFprfTest.cs
│       ├── MixJumpStoreDataSched.cs
│       ├── MixJumpStoreSchedTest.cs
│       ├── MixJumpThenAddSched.cs
│       ├── MixLdqStqTest.cs
│       ├── MixLoadStoreDivSchedTest.cs
│       ├── MixLoadStoreSchedTest.cs
│       ├── MixStoreDivSchedTest.cs
│       ├── MixVec512Vec256BlockRfTest.cs
│       ├── MixVec512Vec256RfTest.cs
│       ├── MmxRfTest.cs
│       ├── MulSchedTest.cs
│       ├── NopLoopTest.cs
│       ├── PdepSchedTest.cs
│       ├── ReturnStackTest.cs
│       ├── RobTest.cs
│       ├── RorSchedTest.cs
│       ├── ShlSchedTest.cs
│       ├── StoreDataDivNsqTest.cs
│       ├── StoreDataNsqTest.cs
│       ├── StoreDataSchedTest.cs
│       ├── StoreDivNsqTest.cs
│       ├── StoreDivSchedTest.cs
│       ├── StoreNsq.cs
│       ├── StoreSchedTest.cs
│       ├── Stq128Test.cs
│       ├── Stq512Test.cs
│       ├── StqTest.cs
│       ├── TakenBranchBufferTest.cs
│       ├── TakenJumpSchedTest.cs
│       ├── Vec512RfTest.cs
│       ├── VecMulNsq.cs
│       └── ZeroRobTest.cs
├── CoherencyLatency/
│   ├── CoherencyLatency.cpp
│   ├── CoherencyLatency.sln
│   ├── CoherencyLatency.vcxproj
│   ├── Makefile
│   ├── PThreadsCoherencyLatency.c
│   └── c2cparse/
│       ├── Program.cs
│       ├── c2cparse.csproj
│       └── c2cparse.sln
├── Common/
│   ├── arch_detect.mk
│   ├── ci_gpumemlatency.sh
│   ├── ci_package.sh
│   ├── perfmon.h
│   ├── timing.c
│   └── timing.h
├── CoreClockChecker/
│   ├── BoostClockChecker.c
│   ├── BoostClockChecker_arm.s
│   ├── BoostClockChecker_x86.s
│   ├── CoreClockChecker.c
│   ├── CoreClockChecker_x86.s
│   ├── Makefile
│   └── WinCoreClockChecker/
│       ├── CoreClockCheckFunctions.asm
│       ├── WinCoreClockChecker.cpp
│       ├── WinCoreClockChecker.sln
│       ├── WinCoreClockChecker.vcxproj
│       └── WinCoreClockChecker.vcxproj.filters
├── GpuMemLatency/
│   ├── Makefile
│   ├── OpenCL/
│   │   ├── LICENSE
│   │   ├── README.md
│   │   ├── include/
│   │   │   └── CL/
│   │   │       ├── cl.h
│   │   │       ├── cl_d3d10.h
│   │   │       ├── cl_d3d11.h
│   │   │       ├── cl_dx9_media_sharing.h
│   │   │       ├── cl_dx9_media_sharing_intel.h
│   │   │       ├── cl_egl.h
│   │   │       ├── cl_ext.h
│   │   │       ├── cl_ext_intel.h
│   │   │       ├── cl_gl.h
│   │   │       ├── cl_gl_ext.h
│   │   │       ├── cl_half.h
│   │   │       ├── cl_icd.h
│   │   │       ├── cl_platform.h
│   │   │       ├── cl_va_api_media_sharing_intel.h
│   │   │       ├── cl_version.h
│   │   │       └── opencl.h
│   │   └── lib/
│   │       └── OpenCL.lib
│   ├── atomic_test.c
│   ├── bw_test.c
│   ├── common.c
│   ├── instruction_rate.c
│   ├── instruction_rate_fp16_kernel.cl
│   ├── instruction_rate_fp64_kernel.cl
│   ├── instruction_rate_kernel.cl
│   ├── kernel.cl
│   ├── kernels/
│   │   ├── atomic_exec_latency_test.cl
│   │   ├── buffer_bw_test.cl
│   │   ├── c2c_atomic_exec_latency_test.cl
│   │   ├── constant_unrolled_latency_test.cl
│   │   ├── ldst_bw_test.cl
│   │   ├── local_64_bw_test.cl
│   │   ├── local_atomic_latency_test.cl
│   │   ├── local_bw_test.cl
│   │   ├── local_float4_bw_test.cl
│   │   ├── local_unrolled_latency_test.cl
│   │   ├── scalar_unrolled_latency_test.cl
│   │   ├── sum_bw_test.cl
│   │   ├── tex_bw_test.cl
│   │   ├── tex_latency_test.cl
│   │   └── unrolled_latency_test.cl
│   ├── latency_test.c
│   ├── local_mem_latency_kernel.cl
│   ├── opencltest.c
│   ├── opencltest.h
│   ├── opencltest.sln
│   ├── opencltest.vcxproj
│   ├── opencltest.vcxproj.filters
│   └── texturetest.c
├── InstructionRate/
│   ├── Makefile
│   ├── arm_instructionrate.c
│   ├── arm_instructionrate.s
│   ├── riscv_instructionrate.c
│   ├── riscv_instructionrate.s
│   ├── test.s
│   ├── x86_fusion.c
│   ├── x86_fusion.s
│   ├── x86_instructionrate.c
│   └── x86_instructionrate.s
├── LICENSE
├── LoadedMemoryLatency/
│   ├── LoadedMemoryLatency/
│   │   ├── LoadedMemoryLatency.asm
│   │   ├── LoadedMemoryLatency.cpp
│   │   ├── LoadedMemoryLatency.sln
│   │   ├── LoadedMemoryLatency.vcxproj
│   │   └── LoadedMemoryLatency.vcxproj.filters
│   ├── LoadedMemoryLatency.c
│   ├── LoadedMemoryLatency_amd64.s
│   ├── LoadedMemoryLatency_arm.s
│   └── Makefile
├── Makefile
├── MemoryBandwidth/
│   ├── Makefile
│   ├── MemoryBandwidth/
│   │   ├── MemoryBandwidth.cpp
│   │   ├── MemoryBandwidth.sln
│   │   ├── MemoryBandwidth.vcxproj
│   │   ├── MemoryBandwidth.vcxproj.filters
│   │   ├── MemoryBandwidthFunctions.asm
│   │   └── MemoryBandwidthFunctions32.asm
│   ├── MemoryBandwidth.c
│   ├── MemoryBandwidth_arm.s
│   ├── MemoryBandwidth_riscv.s
│   ├── MemoryBandwidth_x86.s
│   ├── MixedMemoryBandwidthTest/
│   │   ├── MemoryBandwidth.h
│   │   ├── MemoryBandwidthFunctions.asm
│   │   ├── MixedMemoryBandwidthTest.cpp
│   │   ├── MixedMemoryBandwidthTest.vcxproj
│   │   └── MixedMemoryBandwidthTest.vcxproj.filters
│   └── README.md
├── MemoryLatency/
│   ├── Makefile
│   ├── MemoryLatency.c
│   ├── MemoryLatency.cpp
│   ├── MemoryLatency.sln
│   ├── MemoryLatency.vcxproj
│   ├── MemoryLatencyFunctions.asm
│   ├── MemoryLatency_arm.s
│   ├── MemoryLatency_i686.s
│   ├── MemoryLatency_riscv.s
│   ├── MemoryLatency_x86.s
│   └── README.md
├── README.md
├── mt_instructionrate/
│   ├── InstructionRateFunctions.asm
│   ├── Makefile
│   ├── Project1.vcxproj
│   ├── Project1.vcxproj.filters
│   ├── arm_mt_instructionrate.c
│   ├── arm_mt_instructionrate.s
│   ├── mt_instructionrate.c
│   ├── mt_instructionrate.sln
│   ├── ppc64_mt_instructionrate.c
│   ├── ppc64_mt_instructionrate.s
│   ├── x86_mt_instructionrate
│   ├── x86_mt_instructionrate.c
│   └── x86_mt_instructionrate.s
└── svm/
    ├── OpenCL/
    │   ├── include/
    │   │   └── CL/
    │   │       ├── Utils/
    │   │       │   ├── Context.h
    │   │       │   ├── Context.hpp
    │   │       │   ├── Detail.hpp
    │   │       │   ├── Device.hpp
    │   │       │   ├── Error.h
    │   │       │   ├── Error.hpp
    │   │       │   ├── ErrorCodes.h
    │   │       │   ├── Event.h
    │   │       │   ├── Event.hpp
    │   │       │   ├── File.h
    │   │       │   ├── File.hpp
    │   │       │   ├── InteropContext.hpp
    │   │       │   ├── OpenCLUtilsCpp_Export.h
    │   │       │   ├── OpenCLUtils_Export.h
    │   │       │   ├── Platform.hpp
    │   │       │   ├── Utils.h
    │   │       │   └── Utils.hpp
    │   │       ├── cl.h
    │   │       ├── cl2.hpp
    │   │       ├── cl_d3d10.h
    │   │       ├── cl_d3d11.h
    │   │       ├── cl_dx9_media_sharing.h
    │   │       ├── cl_dx9_media_sharing_intel.h
    │   │       ├── cl_egl.h
    │   │       ├── cl_ext.h
    │   │       ├── cl_ext_intel.h
    │   │       ├── cl_function_types.h
    │   │       ├── cl_gl.h
    │   │       ├── cl_gl_ext.h
    │   │       ├── cl_half.h
    │   │       ├── cl_icd.h
    │   │       ├── cl_layer.h
    │   │       ├── cl_platform.h
    │   │       ├── cl_va_api_media_sharing_intel.h
    │   │       ├── cl_version.h
    │   │       ├── opencl.h
    │   │       └── opencl.hpp
    │   ├── lib/
    │   │   ├── OpenCL.lib
    │   │   ├── OpenCLExt.lib
    │   │   ├── OpenCLUtils.lib
    │   │   ├── OpenCLUtilsCpp.lib
    │   │   ├── OpenCLUtilsCppd.lib
    │   │   ├── OpenCLUtilsd.lib
    │   │   └── pkgconfig/
    │   │       └── OpenCL.pc
    │   └── share/
    │       ├── cmake/
    │       │   ├── OpenCL/
    │       │   │   ├── OpenCLConfig.cmake
    │       │   │   └── OpenCLConfigVersion.cmake
    │       │   ├── OpenCLExtensionLoader/
    │       │   │   ├── OpenCLExtensionLoaderConfig.cmake
    │       │   │   ├── OpenCLExtensionLoaderConfigVersion.cmake
    │       │   │   ├── OpenCLExtensionLoaderTargets-debug.cmake
    │       │   │   ├── OpenCLExtensionLoaderTargets-release.cmake
    │       │   │   └── OpenCLExtensionLoaderTargets.cmake
    │       │   ├── OpenCLHeaders/
    │       │   │   ├── OpenCLHeadersConfig.cmake
    │       │   │   ├── OpenCLHeadersConfigVersion.cmake
    │       │   │   └── OpenCLHeadersTargets.cmake
    │       │   ├── OpenCLHeadersCpp/
    │       │   │   ├── OpenCLHeadersCppConfig.cmake
    │       │   │   ├── OpenCLHeadersCppConfigVersion.cmake
    │       │   │   └── OpenCLHeadersCppTargets.cmake
    │       │   ├── OpenCLICDLoader/
    │       │   │   ├── OpenCLICDLoaderConfig.cmake
    │       │   │   ├── OpenCLICDLoaderConfigVersion.cmake
    │       │   │   ├── OpenCLICDLoaderTargets-debug.cmake
    │       │   │   ├── OpenCLICDLoaderTargets-release.cmake
    │       │   │   └── OpenCLICDLoaderTargets.cmake
    │       │   ├── OpenCLUtils/
    │       │   │   ├── OpenCLUtilsConfig.cmake
    │       │   │   ├── OpenCLUtilsConfigVersion.cmake
    │       │   │   ├── OpenCLUtilsTargets-debug.cmake
    │       │   │   ├── OpenCLUtilsTargets-release.cmake
    │       │   │   └── OpenCLUtilsTargets.cmake
    │       │   └── OpenCLUtilsCpp/
    │       │       ├── OpenCLUtilsCppConfig.cmake
    │       │       ├── OpenCLUtilsCppConfigVersion.cmake
    │       │       ├── OpenCLUtilsCppTargets-debug.cmake
    │       │       ├── OpenCLUtilsCppTargets-release.cmake
    │       │       └── OpenCLUtilsCppTargets.cmake
    │       └── pkgconfig/
    │           ├── OpenCL-CLHPP.pc
    │           └── OpenCL-Headers.pc
    ├── atomic_latency_kernel.cl
    ├── svm.sln
    ├── svm.vcxproj
    ├── svm.vcxproj.filters
    └── svmtest.cpp
Download .txt
Showing preview only (1,568K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (2565 symbols across 155 files)

FILE: AsmGen/DataFiles/CommonFunctions.c
  function setAffinity (line 12) | void setAffinity(int core) {
  type ThreadData (line 21) | struct ThreadData {
  function printCsvHeader (line 29) | void printCsvHeader(uint32_t* xCounts, uint32_t xLen) {
  function printResultFloatArr (line 39) | void printResultFloatArr(float* arr, uint32_t *xCounts, uint32_t xLen, u...
  function FillPatternArr (line 53) | void FillPatternArr(uint32_t* pattern_arr, uint32_t list_size, uint32_t ...

FILE: AsmGen/DataFiles/GccBranchHistFunction.c
  function runBranchHistTest (line 7) | float runBranchHistTest(uint32_t historyLen, uint32_t branchCountIdx, in...

FILE: AsmGen/DataFiles/GccIndirectBranchFunction.c
  function runIndirectBranchTest (line 7) | float runIndirectBranchTest(uint32_t branchCountIdx, uint32_t targetCoun...

FILE: AsmGen/IUarchTest.cs
  type IUarchTest (line 5) | public interface IUarchTest
    method SupportsIsa (line 12) | public bool SupportsIsa(ISA isa);
    method GenerateAsm (line 14) | public void GenerateAsm(StringBuilder sb, ISA isa);
    method GenerateTestBlock (line 15) | public void GenerateTestBlock(StringBuilder sb, ISA isa);
    method GenerateAsmGlobalLines (line 16) | public void GenerateAsmGlobalLines(StringBuilder sb);
    method GenerateExternLines (line 17) | public void GenerateExternLines(StringBuilder sb);
    type ISA (line 19) | public enum ISA

FILE: AsmGen/Program.cs
  class Program (line 9) | class Program
    method Main (line 17) | static void Main(string[] args)
    method GenerateCFile (line 46) | static void GenerateCFile(List<IUarchTest> tests, IUarchTest.ISA isa)
    method GenerateAsmFile (line 82) | static void GenerateAsmFile(List<IUarchTest> tests, IUarchTest.ISA isa)
    method GenerateMakefile (line 112) | static void GenerateMakefile()
    method AddCommonInitCode (line 139) | static void AddCommonInitCode(StringBuilder sb, List<IUarchTest> tests...
    method AddCommonEndCode (line 187) | static void AddCommonEndCode(StringBuilder sb)
    method GenerateLatencyTestArray (line 194) | static void GenerateLatencyTestArray(StringBuilder sb)

FILE: AsmGen/UarchTest.cs
  class UarchTest (line 6) | public abstract class UarchTest : IUarchTest
    method SupportsIsa (line 20) | public abstract bool SupportsIsa(IUarchTest.ISA isa);
    method GenerateAsm (line 21) | public abstract void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa);
    method GenerateAsmGlobalLines (line 23) | public void GenerateAsmGlobalLines(StringBuilder sb)
    method GenerateExternLines (line 29) | public void GenerateExternLines(StringBuilder sb)
    method GenerateTestBlock (line 50) | public void GenerateTestBlock(StringBuilder sb, IUarchTest.ISA isa)
    method GenerateMipsPrepArrayFunction (line 119) | public static void GenerateMipsPrepArrayFunction(StringBuilder sb)
    method GenerateRiscvPrepArrayFunction (line 142) | public static void GenerateRiscvPrepArrayFunction(StringBuilder sb)

FILE: AsmGen/UarchTestHelpers.cs
  class UarchTestHelpers (line 9) | public static class UarchTestHelpers
    method GenerateCountArray (line 11) | public static int[] GenerateCountArray(int low, int high, int step)
    method GenerateNasmGlobalLines (line 22) | public static void GenerateNasmGlobalLines(StringBuilder sb, UarchTest...
    method GenerateAsmGlobalLines (line 29) | public static void GenerateAsmGlobalLines(StringBuilder sb, UarchTest ...
    method GenerateExternLines (line 36) | public static void GenerateExternLines(StringBuilder sb, UarchTest test)
    method GenerateVsExternLines (line 43) | public static void GenerateVsExternLines(StringBuilder sb, UarchTest t...
    method GenerateX86AsmDivStructureTestFuncs (line 62) | public static void GenerateX86AsmDivStructureTestFuncs(StringBuilder s...
    method GenerateX86AsmDivNsqTestFuncs (line 162) | public static void GenerateX86AsmDivNsqTestFuncs(StringBuilder sb,
    method GenerateX86AsmStructureTestFuncs (line 283) | public static void GenerateX86AsmStructureTestFuncs(StringBuilder sb,
    method GenerateX86AsmNsqTestFuncs (line 380) | public static void GenerateX86AsmNsqTestFuncs(StringBuilder sb,
    method GenerateX86AsmIntSchedTestFuncs (line 470) | public static void GenerateX86AsmIntSchedTestFuncs(StringBuilder sb, i...
    method GenerateX86AsmFpSchedTestFuncs (line 548) | public static void GenerateX86AsmFpSchedTestFuncs(StringBuilder sb, in...
    method GenerateX86AsmFp256SchedTestFuncs (line 618) | public static void GenerateX86AsmFp256SchedTestFuncs(StringBuilder sb,...
    method GenerateX86NasmDivStructureTestFuncs (line 701) | public static void GenerateX86NasmDivStructureTestFuncs(StringBuilder ...
    method GenerateArmAsmStructureTestFuncs (line 795) | public static void GenerateArmAsmStructureTestFuncs(StringBuilder sb,
    method GenerateArmAsmNsqTestFuncs (line 863) | public static void GenerateArmAsmNsqTestFuncs(StringBuilder sb,
    method GenerateStub (line 927) | public static void GenerateStub(StringBuilder sb, int[] counts, string...
    method GenerateArmAsmFpSchedTestFuncs (line 937) | public static void GenerateArmAsmFpSchedTestFuncs(StringBuilder sb, in...
    method GenerateArmAsmDivStructureTestFuncs (line 950) | public static void GenerateArmAsmDivStructureTestFuncs(StringBuilder sb,
    method GetArmDependentBranch (line 1016) | public static string GetArmDependentBranch(string prefix)
    method GetArmDependentBranchTarget (line 1021) | public static string GetArmDependentBranchTarget(string prefix)
    method GetRiscvDependentBranch (line 1026) | public static string GetRiscvDependentBranch(string prefix)
    method GetRiscvDependentBranchTarget (line 1031) | public static string GetRiscvDependentBranchTarget(string prefix)
    method GenerateArmAsmDivNsqTestFuncs (line 1036) | public static void GenerateArmAsmDivNsqTestFuncs(StringBuilder sb,
    method GenerateMipsAsmStructureTestFuncs (line 1118) | public static void GenerateMipsAsmStructureTestFuncs(StringBuilder sb,
    method GenerateRiscvAsmStructureTestFuncs (line 1163) | public static void GenerateRiscvAsmStructureTestFuncs(StringBuilder sb,

FILE: AsmGen/tests/A73RobTest.cs
  class A73RobTest (line 9) | public class A73RobTest : UarchTest
    method A73RobTest (line 11) | public A73RobTest(int low, int high, int step)
    method SupportsIsa (line 21) | public override bool SupportsIsa(IUarchTest.ISA isa)
    method GenerateAsm (line 27) | public override void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)

FILE: AsmGen/tests/AddLoopTest.cs
  class AddLoopTest (line 5) | public class AddLoopTest : UarchTest
    method AddLoopTest (line 13) | public AddLoopTest(int low, int high, int step)
    method SupportsIsa (line 23) | public override bool SupportsIsa(IUarchTest.ISA isa)
    method GenerateAsm (line 31) | public override void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)
    method GenerateX86GccAsm (line 37) | public void GenerateX86GccAsm(StringBuilder sb)
    method GenerateArmAsm (line 58) | public void GenerateArmAsm(StringBuilder sb)

FILE: AsmGen/tests/AddNsq.cs
  class AddNsq (line 5) | public class AddNsq : UarchTest
    method AddNsq (line 8) | public AddNsq(int low, int high, int step, int totalOps)
    method SupportsIsa (line 19) | public override bool SupportsIsa(IUarchTest.ISA isa)
    method GenerateAsm (line 26) | public override void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)

FILE: AsmGen/tests/AddSchedTest.cs
  class AddSchedTest (line 5) | public class AddSchedTest : UarchTest
    method AddSchedTest (line 7) | public AddSchedTest(int low, int high, int step)
    method SupportsIsa (line 17) | public override bool SupportsIsa(IUarchTest.ISA isa)
    method GenerateAsm (line 26) | public override void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)

FILE: AsmGen/tests/AddvNsq.cs
  class AddvNsq (line 5) | public class AddvNsq : UarchTest
    method AddvNsq (line 8) | public AddvNsq(int low, int high, int step, int totalOps)
    method SupportsIsa (line 19) | public override bool SupportsIsa(IUarchTest.ISA isa)
    method GenerateAsm (line 25) | public override void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)

FILE: AsmGen/tests/AddvSchedTest.cs
  class AddvSched (line 5) | public class AddvSched : UarchTest
    method AddvSched (line 7) | public AddvSched(int low, int high, int step)
    method SupportsIsa (line 17) | public override bool SupportsIsa(IUarchTest.ISA isa)
    method GenerateAsm (line 23) | public override void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)

FILE: AsmGen/tests/AeseSchedTest.cs
  class AeseSchedTest (line 5) | public class AeseSchedTest : UarchTest
    method AeseSchedTest (line 7) | public AeseSchedTest(int low, int high, int step)
    method SupportsIsa (line 17) | public override bool SupportsIsa(IUarchTest.ISA isa)
    method GenerateAsm (line 24) | public override void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)

FILE: AsmGen/tests/AesencNsq.cs
  class AesencNsq (line 5) | public class AesencNsq : UarchTest
    method AesencNsq (line 8) | public AesencNsq(int low, int high, int step, int totalOps)
    method SupportsIsa (line 19) | public override bool SupportsIsa(IUarchTest.ISA isa)
    method GenerateAsm (line 26) | public override void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)

FILE: AsmGen/tests/BranchBufferTest.cs
  class BranchBufferTest (line 5) | public class BranchBufferTest : UarchTest
    method BranchBufferTest (line 9) | public BranchBufferTest(int low, int high, int step, bool mixNops = fa...
    method SupportsIsa (line 21) | public override bool SupportsIsa(IUarchTest.ISA isa)
    method GenerateAsm (line 30) | public override void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)
    method GenerateX86GccAsm (line 47) | public void GenerateX86GccAsm(StringBuilder sb)
    method GenerateArmAsm (line 119) | public void GenerateArmAsm(StringBuilder sb)
    method GenerateMipsAsm (line 173) | public void GenerateMipsAsm(StringBuilder sb)

FILE: AsmGen/tests/BranchHistoryTest.cs
  class BranchHistoryTest (line 6) | public class BranchHistoryTest : IUarchTest
    method BranchHistoryTest (line 21) | public BranchHistoryTest()
    method SupportsIsa (line 33) | public bool SupportsIsa(IUarchTest.ISA isa)
    method GenerateAsm (line 42) | public void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)
    method GenerateArmAsm (line 50) | public void GenerateArmAsm(StringBuilder sb)
    method GenerateX86GccAsm (line 97) | public void GenerateX86GccAsm(StringBuilder sb)
    method GenerateMipsAsm (line 146) | public void GenerateMipsAsm(StringBuilder sb)
    method GenerateRiscvAsm (line 202) | public void GenerateRiscvAsm(StringBuilder sb)
    method GenerateTestBlock (line 256) | public void GenerateTestBlock(StringBuilder sb, IUarchTest.ISA isa)
    method GenerateAsmGlobalLines (line 264) | public void GenerateAsmGlobalLines(StringBuilder sb)
    method GenerateExternLines (line 271) | public void GenerateExternLines(StringBuilder sb)
    method GenerateInitializationCode (line 282) | public void GenerateInitializationCode(StringBuilder sb, bool gcc)
    method GenerateCommonTestBlock (line 306) | public void GenerateCommonTestBlock(StringBuilder sb)

FILE: AsmGen/tests/BtbTest.cs
  class BtbTest (line 6) | public class BtbTest : UarchTest
    method SupportsIsa (line 12) | public override bool SupportsIsa(IUarchTest.ISA isa)
    type BranchType (line 21) | public enum BranchType
    method BtbTest (line 46) | public BtbTest(int spacing, BranchType branchType, bool varyspacing = ...
    method GetBranchFuncName (line 60) | private string GetBranchFuncName(int branchCount) { return Prefix + br...
    method GetLabelName (line 61) | public string GetLabelName(string funcName, int part) { return funcNam...
    method GenerateAsm (line 63) | public override void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)
    method GenerateX86GccAsm (line 83) | public void GenerateX86GccAsm(StringBuilder sb)
    method Get4BNopAlign (line 145) | private string Get4BNopAlign()
    method GenerateArmAsm (line 174) | public void GenerateArmAsm(StringBuilder sb)
    method GenerateMipsAsm (line 233) | public void GenerateMipsAsm(StringBuilder sb)
    method GetRiscvNopAlign (line 274) | private string GetRiscvNopAlign()
    method GenerateRiscvAsm (line 289) | public void GenerateRiscvAsm(StringBuilder sb)

FILE: AsmGen/tests/CvtSchedTest.cs
  class CvtSchedTest (line 5) | public class CvtSchedTest : UarchTest
    method CvtSchedTest (line 7) | public CvtSchedTest(int low, int high, int step)
    method SupportsIsa (line 17) | public override bool SupportsIsa(IUarchTest.ISA isa)
    method GenerateAsm (line 26) | public override void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)

FILE: AsmGen/tests/FAdd256RfTest.cs
  class Fadd256RfTest (line 5) | public class Fadd256RfTest : UarchTest
    type TestMode (line 7) | public enum TestMode
    method Fadd256RfTest (line 15) | public Fadd256RfTest(int low, int high, int step, TestMode mode)
    method SupportsIsa (line 27) | public override bool SupportsIsa(IUarchTest.ISA isa)
    method GenerateAsm (line 35) | public override void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)

FILE: AsmGen/tests/Fadd128RfTest.cs
  class Fadd128RfTest (line 6) | public class Fadd128RfTest : UarchTest
    method Fadd128RfTest (line 9) | public Fadd128RfTest(int low, int high, int step, bool initialDependen...
    method SupportsIsa (line 20) | public override bool SupportsIsa(IUarchTest.ISA isa)
    method GenerateAsm (line 35) | public override void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)

FILE: AsmGen/tests/Fadd128SchedTest.cs
  class Fadd128SchedTest (line 5) | public class Fadd128SchedTest : UarchTest
    method Fadd128SchedTest (line 7) | public Fadd128SchedTest(int low, int high, int step)
    method SupportsIsa (line 17) | public override bool SupportsIsa(IUarchTest.ISA isa)
    method GenerateAsm (line 24) | public override void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)

FILE: AsmGen/tests/Fadd256SchedTest.cs
  class Fadd256SchedTest (line 5) | public class Fadd256SchedTest : UarchTest
    method Fadd256SchedTest (line 7) | public Fadd256SchedTest(int low, int high, int step)
    method SupportsIsa (line 17) | public override bool SupportsIsa(IUarchTest.ISA isa)
    method GenerateAsm (line 25) | public override void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)

FILE: AsmGen/tests/FaddNsq.cs
  class FaddNsq (line 5) | public class FaddNsq : UarchTest
    method FaddNsq (line 8) | public FaddNsq(int low, int high, int step, int totalOps)
    method SupportsIsa (line 19) | public override bool SupportsIsa(IUarchTest.ISA isa)
    method GenerateAsm (line 26) | public override void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)

FILE: AsmGen/tests/FaddSchedTest.cs
  class FaddSchedTest (line 5) | public class FaddSchedTest : UarchTest
    method FaddSchedTest (line 7) | public FaddSchedTest(int low, int high, int step)
    method SupportsIsa (line 17) | public override bool SupportsIsa(IUarchTest.ISA isa)
    method GenerateAsm (line 26) | public override void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)

FILE: AsmGen/tests/FcmpSchedTest.cs
  class FcmpSchedTest (line 5) | public class FcmpSchedTest : UarchTest
    method FcmpSchedTest (line 7) | public FcmpSchedTest(int low, int high, int step)
    method SupportsIsa (line 17) | public override bool SupportsIsa(IUarchTest.ISA isa)
    method GenerateAsm (line 23) | public override void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)

FILE: AsmGen/tests/FlagRfTest.cs
  class FlagRfTest (line 5) | public class FlagRfTest : UarchTest
    method FlagRfTest (line 8) | public FlagRfTest(int low, int high, int step, bool initialDependentBr...
    method SupportsIsa (line 19) | public override bool SupportsIsa(IUarchTest.ISA isa)
    method GenerateAsm (line 28) | public override void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)

FILE: AsmGen/tests/Fma256SchedTest.cs
  class Fma256SchedTest (line 5) | public class Fma256SchedTest : UarchTest
    method Fma256SchedTest (line 7) | public Fma256SchedTest(int low, int high, int step)
    method SupportsIsa (line 17) | public override bool SupportsIsa(IUarchTest.ISA isa)
    method GenerateAsm (line 25) | public override void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)

FILE: AsmGen/tests/FmovSched.cs
  class FmovSched (line 5) | public class FmovSched : UarchTest
    method FmovSched (line 7) | public FmovSched(int low, int high, int step)
    method SupportsIsa (line 17) | public override bool SupportsIsa(IUarchTest.ISA isa)
    method GenerateAsm (line 23) | public override void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)

FILE: AsmGen/tests/FmulSchedTest.cs
  class FmulSchedTest (line 5) | public class FmulSchedTest : UarchTest
    method FmulSchedTest (line 7) | public FmulSchedTest(int low, int high, int step)
    method SupportsIsa (line 17) | public override bool SupportsIsa(IUarchTest.ISA isa)
    method GenerateAsm (line 25) | public override void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)
    method GenerateX86Asm (line 41) | public void GenerateX86Asm(StringBuilder sb)
    method GenerateArmAsm (line 53) | public void GenerateArmAsm(StringBuilder sb)
    method GenerateRiscvAsm (line 63) | public void GenerateRiscvAsm(StringBuilder sb)

FILE: AsmGen/tests/FpRfTest.cs
  class FpRfTest (line 5) | public class FpRfTest : UarchTest
    method FpRfTest (line 8) | public FpRfTest(int low, int high, int step, bool initialDependentBranch)
    method SupportsIsa (line 19) | public override bool SupportsIsa(IUarchTest.ISA isa)
    method GenerateAsm (line 35) | public override void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)

FILE: AsmGen/tests/FpStoreDataNsq.cs
  class FpStoreDataNsqTest (line 5) | public class FpStoreDataNsqTest : UarchTest
    method FpStoreDataNsqTest (line 7) | public FpStoreDataNsqTest(int low, int high, int step)
    method SupportsIsa (line 17) | public override bool SupportsIsa(IUarchTest.ISA isa)
    method GenerateAsm (line 23) | public override void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)

FILE: AsmGen/tests/IdrfTest.cs
  class IdrfTest (line 6) | public class IdrfTest : UarchTest
    method IdrfTest (line 8) | public IdrfTest(int low, int high, int step)
    method SupportsIsa (line 18) | public override bool SupportsIsa(IUarchTest.ISA isa)
    method GenerateAsm (line 24) | public override void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)

FILE: AsmGen/tests/IndirectBranchTest.cs
  class IndirectBranchTest (line 6) | public class IndirectBranchTest : IUarchTest
    method IndirectBranchTest (line 13) | public IndirectBranchTest(bool assist)
    method SupportsIsa (line 25) | public bool SupportsIsa(IUarchTest.ISA isa)
    method GenerateAsm (line 33) | public void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)
    method GetFunctionName (line 49) | private string GetFunctionName(int branchCount, int targetCount)
    method GetTargetLabelName (line 54) | private string GetTargetLabelName(int branchCount, int targetCount, in...
    method GenerateArmAsm (line 59) | public void GenerateArmAsm(StringBuilder sb)
    method GenerateX86GccAsm (line 169) | public void GenerateX86GccAsm(StringBuilder sb)
    method GenerateMipsAsm (line 281) | public void GenerateMipsAsm(StringBuilder sb)
    method GenerateExternLines (line 363) | public void GenerateExternLines(StringBuilder sb)
    method GenerateInitializationCode (line 374) | public void GenerateInitializationCode(StringBuilder sb)
    method GenerateAsmGlobalLines (line 407) | public void GenerateAsmGlobalLines(StringBuilder sb)
    method GenerateTestBlock (line 414) | public void GenerateTestBlock(StringBuilder sb, IUarchTest.ISA isa)

FILE: AsmGen/tests/IntRfDepStoreTest.cs
  class IntRfTestDependentStore (line 5) | public class IntRfTestDependentStore : UarchTest
    method IntRfTestDependentStore (line 7) | public IntRfTestDependentStore(int low, int high, int step)
    method SupportsIsa (line 17) | public override bool SupportsIsa(IUarchTest.ISA isa)
    method GenerateAsm (line 23) | public override void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)

FILE: AsmGen/tests/IntRfTest.cs
  class IntRfTest (line 5) | public class IntRfTest : UarchTest
    method IntRfTest (line 8) | public IntRfTest(int low, int high, int step, bool initialDependentBra...
    method SupportsIsa (line 19) | public override bool SupportsIsa(IUarchTest.ISA isa)
    method GenerateAsm (line 35) | public override void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)

FILE: AsmGen/tests/JsCvtNsq.cs
  class JsCvtNsq (line 5) | public class JsCvtNsq : UarchTest
    method JsCvtNsq (line 8) | public JsCvtNsq(int low, int high, int step, int totalOps)
    method SupportsIsa (line 19) | public override bool SupportsIsa(IUarchTest.ISA isa)
    method GenerateAsm (line 25) | public override void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)

FILE: AsmGen/tests/JsCvtSched.cs
  class JsCvtSched (line 5) | public class JsCvtSched : UarchTest
    method JsCvtSched (line 7) | public JsCvtSched(int low, int high, int step)
    method SupportsIsa (line 17) | public override bool SupportsIsa(IUarchTest.ISA isa)
    method GenerateAsm (line 23) | public override void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)

FILE: AsmGen/tests/JumpNsqTest.cs
  class JumpNsqTest (line 5) | public class JumpNsqTest : UarchTest
    method JumpNsqTest (line 7) | public JumpNsqTest(int low, int high, int step)
    method SupportsIsa (line 17) | public override bool SupportsIsa(IUarchTest.ISA isa)
    method GenerateAsm (line 26) | public override void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)

FILE: AsmGen/tests/JumpSchedTest.cs
  class JumpSchedTest (line 5) | public class JumpSchedTest : UarchTest
    method JumpSchedTest (line 7) | public JumpSchedTest(int low, int high, int step)
    method SupportsIsa (line 17) | public override bool SupportsIsa(IUarchTest.ISA isa)
    method GenerateAsm (line 26) | public override void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)

FILE: AsmGen/tests/LdqTest.cs
  class LdqTest (line 5) | public class LdqTest : UarchTest
    method LdqTest (line 8) | public LdqTest(int low, int high, int step, bool initialDependentBranch)
    method SupportsIsa (line 19) | public override bool SupportsIsa(IUarchTest.ISA isa)
    method GenerateAsm (line 35) | public override void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)

FILE: AsmGen/tests/LeaSchedTest.cs
  class LeaSchedTest (line 5) | public class LeaSchedTest : UarchTest
    method LeaSchedTest (line 7) | public LeaSchedTest(int low, int high, int step)
    method SupportsIsa (line 17) | public override bool SupportsIsa(IUarchTest.ISA isa)
    method GenerateAsm (line 23) | public override void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)

FILE: AsmGen/tests/LoadNsq.cs
  class LoadNsq (line 5) | public class LoadNsq : UarchTest
    method LoadNsq (line 7) | public LoadNsq(int low, int high, int step)
    method SupportsIsa (line 17) | public override bool SupportsIsa(IUarchTest.ISA isa)
    method GenerateAsm (line 24) | public override void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)

FILE: AsmGen/tests/LoadSchedTest.cs
  class LoadSchedTest (line 5) | public class LoadSchedTest : UarchTest
    method LoadSchedTest (line 7) | public LoadSchedTest(int low, int high, int step)
    method SupportsIsa (line 17) | public override bool SupportsIsa(IUarchTest.ISA isa)
    method GenerateAsm (line 26) | public override void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)

FILE: AsmGen/tests/MaddSchedTest.cs
  class MaddSchedTest (line 5) | public class MaddSchedTest : UarchTest
    method MaddSchedTest (line 7) | public MaddSchedTest(int low, int high, int step)
    method SupportsIsa (line 17) | public override bool SupportsIsa(IUarchTest.ISA isa)
    method GenerateAsm (line 23) | public override void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)

FILE: AsmGen/tests/MaskRfTest.cs
  class MaskRfTest (line 5) | public class MaskRfTest : UarchTest
    method MaskRfTest (line 7) | public MaskRfTest(int low, int high, int step)
    method SupportsIsa (line 17) | public override bool SupportsIsa(IUarchTest.ISA isa)
    method GenerateAsm (line 23) | public override void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)

FILE: AsmGen/tests/MixAddJumpSched.cs
  class MixAddJumpSchedTest (line 5) | public class MixAddJumpSchedTest : UarchTest
    method MixAddJumpSchedTest (line 7) | public MixAddJumpSchedTest(int low, int high, int step)
    method SupportsIsa (line 17) | public override bool SupportsIsa(IUarchTest.ISA isa)
    method GenerateAsm (line 26) | public override void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)

FILE: AsmGen/tests/MixAddvJsCvtNsq.cs
  class MixAddvJsCvtNsq (line 5) | public class MixAddvJsCvtNsq : UarchTest
    method MixAddvJsCvtNsq (line 7) | public MixAddvJsCvtNsq(int low, int high, int step)
    method SupportsIsa (line 17) | public override bool SupportsIsa(IUarchTest.ISA isa)
    method GenerateAsm (line 23) | public override void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)

FILE: AsmGen/tests/MixAddvJsCvtSched.cs
  class MixAddvJsCvtSched (line 5) | public class MixAddvJsCvtSched : UarchTest
    method MixAddvJsCvtSched (line 7) | public MixAddvJsCvtSched(int low, int high, int step)
    method SupportsIsa (line 17) | public override bool SupportsIsa(IUarchTest.ISA isa)
    method GenerateAsm (line 23) | public override void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)

FILE: AsmGen/tests/MixBranchStoreTest.cs
  class MixBranchStoreTest (line 5) | public class MixBranchStoreTest : UarchTest
    method MixBranchStoreTest (line 9) | public MixBranchStoreTest(int low, int high, int step, bool mixNops = ...
    method SupportsIsa (line 21) | public override bool SupportsIsa(IUarchTest.ISA isa)
    method GenerateAsm (line 28) | public override void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)
    method GenerateArmAsm (line 37) | public void GenerateArmAsm(StringBuilder sb)

FILE: AsmGen/tests/MixFAdd256and32RfTest.cs
  class MixFAdd256and32RfTest (line 5) | public class MixFAdd256and32RfTest : UarchTest
    method MixFAdd256and32RfTest (line 7) | public MixFAdd256and32RfTest(int low, int high, int step)
    method SupportsIsa (line 17) | public override bool SupportsIsa(IUarchTest.ISA isa)
    method GenerateAsm (line 25) | public override void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)

FILE: AsmGen/tests/MixFpRfDepBranchTest.cs
  class MixFpRfDepBranchTest (line 6) | public class MixFpRfDepBranchTest : UarchTest
    method MixFpRfDepBranchTest (line 9) | public MixFpRfDepBranchTest(int low, int high, int step, int interval)
    method SupportsIsa (line 20) | public override bool SupportsIsa(IUarchTest.ISA isa)
    method GenerateAsm (line 26) | public override void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)

FILE: AsmGen/tests/MixFpVecRfTest.cs
  class MixFpVecRfTest (line 6) | public class MixFpVecRfTest : UarchTest
    method MixFpVecRfTest (line 9) | public MixFpVecRfTest(int low, int high, int step, bool initialDepende...
    method SupportsIsa (line 20) | public override bool SupportsIsa(IUarchTest.ISA isa)
    method GenerateAsm (line 32) | public override void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)

FILE: AsmGen/tests/MixIntRfDepBranchTest.cs
  class MixIntRfDepBranchTest (line 6) | public class MixIntRfDepBranchTest : UarchTest
    method MixIntRfDepBranchTest (line 9) | public MixIntRfDepBranchTest(int low, int high, int step, int interval)
    method SupportsIsa (line 20) | public override bool SupportsIsa(IUarchTest.ISA isa)
    method GenerateAsm (line 26) | public override void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)

FILE: AsmGen/tests/MixIntVec128RfTest.cs
  class MixIntVec128RfTest (line 5) | public class MixIntVec128RfTest : UarchTest
    method MixIntVec128RfTest (line 8) | public MixIntVec128RfTest(int low, int high, int step, bool initialDep...
    method SupportsIsa (line 19) | public override bool SupportsIsa(IUarchTest.ISA isa)
    method GenerateAsm (line 27) | public override void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)

FILE: AsmGen/tests/MixIntrfFprfTest.cs
  class MixIntFpRfTest (line 6) | public class MixIntFpRfTest : UarchTest
    method MixIntFpRfTest (line 9) | public MixIntFpRfTest(int low, int high, int step, bool initialDepende...
    method SupportsIsa (line 20) | public override bool SupportsIsa(IUarchTest.ISA isa)
    method GenerateAsm (line 30) | public override void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)

FILE: AsmGen/tests/MixJumpStoreDataSched.cs
  class MixJumpStoreDataSched (line 5) | public class MixJumpStoreDataSched : UarchTest
    method MixJumpStoreDataSched (line 7) | public MixJumpStoreDataSched(int low, int high, int step)
    method SupportsIsa (line 17) | public override bool SupportsIsa(IUarchTest.ISA isa)
    method GenerateAsm (line 26) | public override void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)

FILE: AsmGen/tests/MixJumpStoreSchedTest.cs
  class MixJumpStoreSchedTest (line 5) | public class MixJumpStoreSchedTest : UarchTest
    method MixJumpStoreSchedTest (line 7) | public MixJumpStoreSchedTest(int low, int high, int step)
    method SupportsIsa (line 17) | public override bool SupportsIsa(IUarchTest.ISA isa)
    method GenerateAsm (line 26) | public override void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)

FILE: AsmGen/tests/MixJumpThenAddSched.cs
  class MixJumpThenAddSched (line 6) | public class MixJumpThenAddSched : UarchTest
    method MixJumpThenAddSched (line 8) | public MixJumpThenAddSched(int low, int high, int step)
    method SupportsIsa (line 18) | public override bool SupportsIsa(IUarchTest.ISA isa)
    method GenerateAsm (line 27) | public override void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)

FILE: AsmGen/tests/MixLdqStqTest.cs
  class MixLdqStqTest (line 5) | public class MixLdqStqTest : UarchTest
    method MixLdqStqTest (line 8) | public MixLdqStqTest(int low, int high, int step, bool initialDependen...
    method SupportsIsa (line 18) | public override bool SupportsIsa(IUarchTest.ISA isa)
    method GenerateAsm (line 25) | public override void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)
    method GenerateX86GccAsm (line 37) | public void GenerateX86GccAsm(StringBuilder sb)
    method GenerateArmAsm (line 47) | public void GenerateArmAsm(StringBuilder sb)

FILE: AsmGen/tests/MixLoadStoreDivSchedTest.cs
  class MixLoadStoreDivSchedTest (line 5) | public class MixLoadStoreDivSchedTest : UarchTest
    method MixLoadStoreDivSchedTest (line 7) | public MixLoadStoreDivSchedTest(int low, int high, int step)
    method SupportsIsa (line 17) | public override bool SupportsIsa(IUarchTest.ISA isa)
    method GenerateAsm (line 24) | public override void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)
    method GenerateX86Asm (line 36) | public void GenerateX86Asm(StringBuilder sb)
    method GenerateArmAsm (line 45) | public void GenerateArmAsm(StringBuilder sb)

FILE: AsmGen/tests/MixLoadStoreSchedTest.cs
  class MixLoadStoreSched (line 5) | public class MixLoadStoreSched : UarchTest
    method MixLoadStoreSched (line 7) | public MixLoadStoreSched(int low, int high, int step)
    method SupportsIsa (line 17) | public override bool SupportsIsa(IUarchTest.ISA isa)
    method GenerateAsm (line 25) | public override void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)

FILE: AsmGen/tests/MixStoreDivSchedTest.cs
  class MixStoreDivSchedTest (line 5) | public class MixStoreDivSchedTest : UarchTest
    method MixStoreDivSchedTest (line 7) | public MixStoreDivSchedTest(int low, int high, int step)
    method SupportsIsa (line 17) | public override bool SupportsIsa(IUarchTest.ISA isa)
    method GenerateAsm (line 24) | public override void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)
    method GenerateX86Asm (line 36) | public void GenerateX86Asm(StringBuilder sb)
    method GenerateArmAsm (line 52) | public void GenerateArmAsm(StringBuilder sb)

FILE: AsmGen/tests/MixVec512Vec256BlockRfTest.cs
  class MixVec512Vec256BlockRfTest (line 6) | public class MixVec512Vec256BlockRfTest : UarchTest
    method MixVec512Vec256BlockRfTest (line 11) | public MixVec512Vec256BlockRfTest(int low, int high, int step, int nTiny)
    method SupportsIsa (line 21) | public override bool SupportsIsa(IUarchTest.ISA isa)
    method GenerateAsm (line 27) | public override void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)

FILE: AsmGen/tests/MixVec512Vec256RfTest.cs
  class MixVec512Vec256RfTest (line 6) | public class MixVec512Vec256RfTest : UarchTest
    method MixVec512Vec256RfTest (line 8) | public MixVec512Vec256RfTest(int low, int high, int step)
    method SupportsIsa (line 18) | public override bool SupportsIsa(IUarchTest.ISA isa)
    method GenerateAsm (line 24) | public override void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)

FILE: AsmGen/tests/MmxRfTest.cs
  class MmxRfTest (line 5) | public class MmxRfTest : UarchTest
    method MmxRfTest (line 7) | public MmxRfTest(int low, int high, int step)
    method SupportsIsa (line 16) | public override bool SupportsIsa(IUarchTest.ISA isa)
    method GenerateAsm (line 22) | public override void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)
    method GenerateX86GccAsm (line 27) | public void GenerateX86GccAsm(StringBuilder sb)

FILE: AsmGen/tests/MulSchedTest.cs
  class MulSchedTest (line 5) | public class MulSchedTest : UarchTest
    method MulSchedTest (line 7) | public MulSchedTest(int low, int high, int step)
    method SupportsIsa (line 17) | public override bool SupportsIsa(IUarchTest.ISA isa)
    method GenerateAsm (line 26) | public override void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)

FILE: AsmGen/tests/NopLoopTest.cs
  class NopLoopTest (line 5) | public class NopLoopTest : UarchTest
    method NopLoopTest (line 13) | public NopLoopTest(int high, int step)
    method SupportsIsa (line 23) | public override bool SupportsIsa(IUarchTest.ISA isa)
    method GenerateAsm (line 31) | public override void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)
    method GenerateX86GccAsm (line 37) | public void GenerateX86GccAsm(StringBuilder sb)
    method GenerateArmAsm (line 52) | public void GenerateArmAsm(StringBuilder sb)

FILE: AsmGen/tests/PdepSchedTest.cs
  class PdepSchedTest (line 5) | public class PdepSchedTest : UarchTest
    method PdepSchedTest (line 7) | public PdepSchedTest(int low, int high, int step)
    method SupportsIsa (line 17) | public override bool SupportsIsa(IUarchTest.ISA isa)
    method GenerateAsm (line 23) | public override void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)

FILE: AsmGen/tests/ReturnStackTest.cs
  class ReturnStackTest (line 6) | public class ReturnStackTest : UarchTest
    method SupportsIsa (line 8) | public override bool SupportsIsa(IUarchTest.ISA isa)
    method ReturnStackTest (line 17) | public ReturnStackTest(int low, int high, int step)
    method GetFunctionName (line 27) | private string GetFunctionName(int count, int depth) { return $"return...
    method GetBranchFuncName (line 29) | private string GetBranchFuncName(int branchCount) { return Prefix + br...
    method GetLabelName (line 30) | public string GetLabelName(string funcName, int part) { return funcNam...
    method GenerateAsm (line 32) | public override void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)
    method GenerateX86GccAsm (line 52) | public void GenerateX86GccAsm(StringBuilder sb)
    method GenerateArmAsm (line 86) | public void GenerateArmAsm(StringBuilder sb)
    method GenerateMipsAsm (line 126) | public void GenerateMipsAsm(StringBuilder sb)
    method GenerateRiscvAsm (line 170) | public void GenerateRiscvAsm(StringBuilder sb)

FILE: AsmGen/tests/RobTest.cs
  class RobTest (line 5) | public class RobTest : UarchTest
    method RobTest (line 9) | public RobTest(int low, int high, int step, bool initialDependentBranch)
    method SupportsIsa (line 21) | public override bool SupportsIsa(IUarchTest.ISA isa)
    method GenerateAsm (line 37) | public override void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)

FILE: AsmGen/tests/RorSchedTest.cs
  class RorSchedTest (line 5) | public class RorSchedTest : UarchTest
    method RorSchedTest (line 7) | public RorSchedTest(int low, int high, int step)
    method SupportsIsa (line 17) | public override bool SupportsIsa(IUarchTest.ISA isa)
    method GenerateAsm (line 23) | public override void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)

FILE: AsmGen/tests/ShlSchedTest.cs
  class ShlSchedTest (line 5) | public class ShlSchedTest : UarchTest
    method ShlSchedTest (line 7) | public ShlSchedTest(int low, int high, int step)
    method SupportsIsa (line 17) | public override bool SupportsIsa(IUarchTest.ISA isa)
    method GenerateAsm (line 23) | public override void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)

FILE: AsmGen/tests/StoreDataDivNsqTest.cs
  class StoreDataDivNsqTest (line 5) | public class StoreDataDivNsqTest : UarchTest
    method StoreDataDivNsqTest (line 7) | public StoreDataDivNsqTest(int low, int high, int step)
    method SupportsIsa (line 17) | public override bool SupportsIsa(IUarchTest.ISA isa)
    method GenerateAsm (line 24) | public override void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)

FILE: AsmGen/tests/StoreDataNsqTest.cs
  class StoreDataNsq (line 5) | public class StoreDataNsq : UarchTest
    method StoreDataNsq (line 7) | public StoreDataNsq(int low, int high, int step)
    method SupportsIsa (line 17) | public override bool SupportsIsa(IUarchTest.ISA isa)
    method GenerateAsm (line 26) | public override void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)

FILE: AsmGen/tests/StoreDataSchedTest.cs
  class StoreDataSchedTest (line 5) | public class StoreDataSchedTest : UarchTest
    method StoreDataSchedTest (line 7) | public StoreDataSchedTest(int low, int high, int step)
    method SupportsIsa (line 17) | public override bool SupportsIsa(IUarchTest.ISA isa)
    method GenerateAsm (line 26) | public override void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)

FILE: AsmGen/tests/StoreDivNsqTest.cs
  class StoreDivNsqTest (line 5) | public class StoreDivNsqTest : UarchTest
    method StoreDivNsqTest (line 7) | public StoreDivNsqTest(int low, int high, int step)
    method SupportsIsa (line 17) | public override bool SupportsIsa(IUarchTest.ISA isa)
    method GenerateAsm (line 24) | public override void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)

FILE: AsmGen/tests/StoreDivSchedTest.cs
  class StoreDivSchedTest (line 5) | public class StoreDivSchedTest : UarchTest
    method StoreDivSchedTest (line 7) | public StoreDivSchedTest(int low, int high, int step)
    method SupportsIsa (line 17) | public override bool SupportsIsa(IUarchTest.ISA isa)
    method GenerateAsm (line 24) | public override void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)
    method GenerateX86Asm (line 36) | public void GenerateX86Asm(StringBuilder sb)
    method GenerateArmAsm (line 56) | public void GenerateArmAsm(StringBuilder sb)

FILE: AsmGen/tests/StoreNsq.cs
  class StoreNsq (line 5) | public class StoreNsq : UarchTest
    method StoreNsq (line 7) | public StoreNsq(int low, int high, int step)
    method SupportsIsa (line 17) | public override bool SupportsIsa(IUarchTest.ISA isa)
    method GenerateAsm (line 23) | public override void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)

FILE: AsmGen/tests/StoreSchedTest.cs
  class StoreSchedTest (line 5) | public class StoreSchedTest : UarchTest
    method StoreSchedTest (line 7) | public StoreSchedTest(int low, int high, int step)
    method SupportsIsa (line 17) | public override bool SupportsIsa(IUarchTest.ISA isa)
    method GenerateAsm (line 25) | public override void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)

FILE: AsmGen/tests/Stq128Test.cs
  class Stq128Test (line 5) | public class Stq128Test : UarchTest
    method Stq128Test (line 8) | public Stq128Test(int low, int high, int step, bool initialDependentBr...
    method SupportsIsa (line 19) | public override bool SupportsIsa(IUarchTest.ISA isa)
    method GenerateAsm (line 34) | public override void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)

FILE: AsmGen/tests/Stq512Test.cs
  class Stq512Test (line 6) | public class Stq512Test : UarchTest
    method Stq512Test (line 9) | public Stq512Test(int low, int high, int step, bool differentLines)
    method SupportsIsa (line 21) | public override bool SupportsIsa(IUarchTest.ISA isa)
    method GenerateAsm (line 27) | public override void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)

FILE: AsmGen/tests/StqTest.cs
  class StqTest (line 6) | public class StqTest : UarchTest
    method StqTest (line 11) | public StqTest(int low, int high, int step, bool initialDependentBranc...
    method SupportsIsa (line 23) | public override bool SupportsIsa(IUarchTest.ISA isa)
    method GenerateAsm (line 39) | public override void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)

FILE: AsmGen/tests/TakenBranchBufferTest.cs
  class TakenBranchBufferTest (line 5) | public class TakenBranchBufferTest : UarchTest
    method TakenBranchBufferTest (line 8) | public TakenBranchBufferTest(int low, int high, int step, bool initial...
    method SupportsIsa (line 19) | public override bool SupportsIsa(IUarchTest.ISA isa)
    method GenerateAsm (line 29) | public override void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)
    method GenerateX86GccAsm (line 35) | public void GenerateX86GccAsm(StringBuilder sb)
    method GenerateArmAsm (line 106) | public void GenerateArmAsm(StringBuilder sb)

FILE: AsmGen/tests/TakenJumpSchedTest.cs
  class TakenJumpSchedTest (line 5) | public class TakenJumpSchedTest : UarchTest
    method TakenJumpSchedTest (line 7) | public TakenJumpSchedTest(int low, int high, int step)
    method SupportsIsa (line 17) | public override bool SupportsIsa(IUarchTest.ISA isa)
    method GenerateAsm (line 26) | public override void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)

FILE: AsmGen/tests/Vec512RfTest.cs
  class Vec512RfTest (line 6) | public class Vec512RfTest : UarchTest
    method Vec512RfTest (line 8) | public Vec512RfTest(int low, int high, int step)
    method SupportsIsa (line 18) | public override bool SupportsIsa(IUarchTest.ISA isa)
    method GenerateAsm (line 24) | public override void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)

FILE: AsmGen/tests/VecMulNsq.cs
  class VecMulNsq (line 5) | public class VecMulNsq : UarchTest
    method VecMulNsq (line 8) | public VecMulNsq(int low, int high, int step, int totalOps)
    method SupportsIsa (line 19) | public override bool SupportsIsa(IUarchTest.ISA isa)
    method GenerateAsm (line 26) | public override void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)

FILE: AsmGen/tests/ZeroRobTest.cs
  class ZeroRobTest (line 5) | public class ZeroRobTest : UarchTest
    method ZeroRobTest (line 8) | public ZeroRobTest(int low, int high, int step, bool initialDependentB...
    method SupportsIsa (line 19) | public override bool SupportsIsa(IUarchTest.ISA isa)
    method GenerateAsm (line 28) | public override void GenerateAsm(StringBuilder sb, IUarchTest.ISA isa)

FILE: CoherencyLatency/CoherencyLatency.cpp
  type LatencyThreadData (line 23) | struct LatencyThreadData {
  function main (line 31) | int main(int argc, char *argv[]) {
  function TimeThreads (line 113) | float TimeThreads(unsigned int processor1, unsigned int processor2, uint...
  function RunTest (line 155) | float RunTest(unsigned int processor1, unsigned int processor2, uint64_t...
  function RunOwnedTest (line 171) | float RunOwnedTest(unsigned int processor1, unsigned int processor2, uin...
  function DWORD (line 205) | DWORD WINAPI LatencyTestThread(LPVOID param) {
  function DWORD (line 223) | DWORD WINAPI ReadLatencyTestThread(LPVOID param) {

FILE: CoherencyLatency/PThreadsCoherencyLatency.c
  type LatencyData (line 20) | typedef struct LatencyThreadData {
  type LatencyPairRunData (line 27) | typedef struct LatencyPairRunData {
  function main (line 40) | int main(int argc, char *argv[]) {
  function TimeThreads (line 177) | float TimeThreads(unsigned int proc1,

FILE: CoherencyLatency/c2cparse/Program.cs
  class C2CParse (line 4) | public class C2CParse
    method Main (line 6) | public static void Main(string[] args)
    method GetCoreIndex (line 68) | public static int GetCoreIndex(int inputIndex, int smtCount, int coreC...

FILE: Common/perfmon.h
  function readmsr (line 2) | uint64_t readmsr(uint32_t coreindex, uint32_t msrindex) {
  type perf_read_data (line 21) | struct perf_read_data {
  type perf_select_data (line 29) | struct perf_select_data {
  type perf_select_data (line 37) | struct perf_select_data
  type perf_read_data (line 38) | struct perf_read_data
  type timeval (line 39) | struct timeval
  function initialize_hw_event (line 43) | void initialize_hw_event(struct perf_event_attr *attr, uint64_t cfg, uin...
  function set_hw_event (line 59) | void set_hw_event(struct perf_select_data *evt, int groupfd) {
  function open_perf_monitoring (line 64) | void open_perf_monitoring() {
  function start_perf_monitoring (line 88) | void start_perf_monitoring() {
  function stop_perf_monitoring (line 96) | void stop_perf_monitoring() {
  function close_perf_monitoring (line 117) | void close_perf_monitoring() {
  function append_perf_header (line 121) | void append_perf_header() {
  function append_perf_values (line 129) | void append_perf_values() {

FILE: Common/timing.c
  type timeb (line 3) | struct timeb
  function start_timing (line 4) | void start_timing() {
  function end_timing (line 8) | unsigned int end_timing() {
  function start_timing_ts (line 13) | void start_timing_ts(struct timeb *startTimeb) {
  function end_timing_ts (line 17) | unsigned int end_timing_ts(struct timeb* startTimeb) {
  type timeval (line 25) | struct timeval
  function start_timing (line 26) | void start_timing() {
  function end_timing (line 30) | unsigned int end_timing() {
  function start_timing_ts (line 35) | void start_timing_ts(struct timeval* start) {
  function end_timing_ts (line 39) | unsigned int end_timing_ts(struct timeval* start) {
  function scale_iterations_to_target (line 47) | unsigned long long scale_iterations_to_target(unsigned long long last_it...

FILE: Common/timing.h
  type timeb (line 8) | struct timeb
  type timeb (line 13) | struct timeb
  type timeb (line 14) | struct timeb
  type timeval (line 16) | struct timeval
  type timeval (line 17) | struct timeval

FILE: CoreClockChecker/BoostClockChecker.c
  function main (line 11) | int main(int argc, char *argv[]) {

FILE: CoreClockChecker/CoreClockChecker.c
  function main (line 40) | int main(int argc, char *argv[]) {
  function detectCpuMaker (line 122) | void detectCpuMaker() {
  function setAffinity (line 143) | void setAffinity(int core) {
  function openMsr (line 155) | int openMsr(int core) {
  function readMsr (line 167) | uint64_t readMsr(int fd, uint32_t addr) {
  function writeMsr (line 176) | void writeMsr(int fd, uint32_t addr, uint64_t value) {
  function setBoost (line 189) | void setBoost(int on) {
  function getEnergyStatusUnits (line 207) | float getEnergyStatusUnits() {
  function getCoreEnergyStat (line 224) | uint64_t getCoreEnergyStat(int core) {
  function getPkgEnergyStat (line 233) | uint64_t getPkgEnergyStat(int core) {
  function getTotalCoreEnergy (line 241) | uint64_t getTotalCoreEnergy() {

FILE: CoreClockChecker/WinCoreClockChecker/WinCoreClockChecker.cpp
  type ClockTestData (line 19) | struct ClockTestData {
  function main (line 32) | int main(int argc, char *argv[])
  function RunEvenCoreTest (line 67) | void RunEvenCoreTest(int coreCount)
  function RunCoreByCoreClockTest (line 79) | void RunCoreByCoreClockTest(int *cores, int coreCount)
  function PrintResults (line 98) | void PrintResults(int *cores, float* results, int coreCount)
  function DWORD (line 121) | DWORD WINAPI ClockTestThread(LPVOID param)
  type timeb (line 131) | struct timeb
  type ClockTestData (line 132) | struct ClockTestData
  type ClockTestData (line 132) | struct ClockTestData
  type ClockTestData (line 132) | struct ClockTestData

FILE: GpuMemLatency/OpenCL/include/CL/cl.h
  type _cl_platform_id (line 29) | struct _cl_platform_id
  type _cl_device_id (line 30) | struct _cl_device_id
  type _cl_context (line 31) | struct _cl_context
  type _cl_command_queue (line 32) | struct _cl_command_queue
  type _cl_mem (line 33) | struct _cl_mem
  type _cl_program (line 34) | struct _cl_program
  type _cl_kernel (line 35) | struct _cl_kernel
  type _cl_event (line 36) | struct _cl_event
  type _cl_sampler (line 37) | struct _cl_sampler
  type cl_uint (line 39) | typedef cl_uint             cl_bool;
  type cl_ulong (line 40) | typedef cl_ulong            cl_bitfield;
  type cl_bitfield (line 41) | typedef cl_bitfield         cl_device_type;
  type cl_uint (line 42) | typedef cl_uint             cl_platform_info;
  type cl_uint (line 43) | typedef cl_uint             cl_device_info;
  type cl_bitfield (line 44) | typedef cl_bitfield         cl_device_fp_config;
  type cl_uint (line 45) | typedef cl_uint             cl_device_mem_cache_type;
  type cl_uint (line 46) | typedef cl_uint             cl_device_local_mem_type;
  type cl_bitfield (line 47) | typedef cl_bitfield         cl_device_exec_capabilities;
  type cl_bitfield (line 49) | typedef cl_bitfield         cl_device_svm_capabilities;
  type cl_bitfield (line 51) | typedef cl_bitfield         cl_command_queue_properties;
  type cl_device_partition_property (line 53) | typedef intptr_t            cl_device_partition_property;
  type cl_bitfield (line 54) | typedef cl_bitfield         cl_device_affinity_domain;
  type cl_context_properties (line 57) | typedef intptr_t            cl_context_properties;
  type cl_uint (line 58) | typedef cl_uint             cl_context_info;
  type cl_bitfield (line 60) | typedef cl_bitfield         cl_queue_properties;
  type cl_uint (line 62) | typedef cl_uint             cl_command_queue_info;
  type cl_uint (line 63) | typedef cl_uint             cl_channel_order;
  type cl_uint (line 64) | typedef cl_uint             cl_channel_type;
  type cl_bitfield (line 65) | typedef cl_bitfield         cl_mem_flags;
  type cl_bitfield (line 67) | typedef cl_bitfield         cl_svm_mem_flags;
  type cl_uint (line 69) | typedef cl_uint             cl_mem_object_type;
  type cl_uint (line 70) | typedef cl_uint             cl_mem_info;
  type cl_bitfield (line 72) | typedef cl_bitfield         cl_mem_migration_flags;
  type cl_uint (line 74) | typedef cl_uint             cl_image_info;
  type cl_uint (line 76) | typedef cl_uint             cl_buffer_create_type;
  type cl_uint (line 78) | typedef cl_uint             cl_addressing_mode;
  type cl_uint (line 79) | typedef cl_uint             cl_filter_mode;
  type cl_uint (line 80) | typedef cl_uint             cl_sampler_info;
  type cl_bitfield (line 81) | typedef cl_bitfield         cl_map_flags;
  type cl_pipe_properties (line 83) | typedef intptr_t            cl_pipe_properties;
  type cl_uint (line 84) | typedef cl_uint             cl_pipe_info;
  type cl_uint (line 86) | typedef cl_uint             cl_program_info;
  type cl_uint (line 87) | typedef cl_uint             cl_program_build_info;
  type cl_uint (line 89) | typedef cl_uint             cl_program_binary_type;
  type cl_int (line 91) | typedef cl_int              cl_build_status;
  type cl_uint (line 92) | typedef cl_uint             cl_kernel_info;
  type cl_uint (line 94) | typedef cl_uint             cl_kernel_arg_info;
  type cl_uint (line 95) | typedef cl_uint             cl_kernel_arg_address_qualifier;
  type cl_uint (line 96) | typedef cl_uint             cl_kernel_arg_access_qualifier;
  type cl_bitfield (line 97) | typedef cl_bitfield         cl_kernel_arg_type_qualifier;
  type cl_uint (line 99) | typedef cl_uint             cl_kernel_work_group_info;
  type cl_uint (line 101) | typedef cl_uint             cl_kernel_sub_group_info;
  type cl_uint (line 103) | typedef cl_uint             cl_event_info;
  type cl_uint (line 104) | typedef cl_uint             cl_command_type;
  type cl_uint (line 105) | typedef cl_uint             cl_profiling_info;
  type cl_bitfield (line 107) | typedef cl_bitfield         cl_sampler_properties;
  type cl_uint (line 108) | typedef cl_uint             cl_kernel_exec_info;
  type cl_bitfield (line 111) | typedef cl_bitfield         cl_device_atomic_capabilities;
  type cl_uint (line 112) | typedef cl_uint             cl_khronos_vendor_id;
  type cl_bitfield (line 113) | typedef cl_bitfield         cl_mem_properties;
  type cl_uint (line 114) | typedef cl_uint             cl_version;
  type cl_image_format (line 117) | typedef struct _cl_image_format {
  type cl_image_desc (line 124) | typedef struct _cl_image_desc {
  type cl_buffer_region (line 158) | typedef struct _cl_buffer_region {
  type cl_name_version (line 169) | typedef struct _cl_name_version {

FILE: GpuMemLatency/OpenCL/include/CL/cl_d3d10.h
  type cl_uint (line 32) | typedef cl_uint cl_d3d10_device_source_khr;
  type cl_uint (line 33) | typedef cl_uint cl_d3d10_device_set_khr;
  type CL_API_ENTRY (line 67) | typedef CL_API_ENTRY cl_int (CL_API_CALL *clGetDeviceIDsFromD3D10KHR_fn)(
  type CL_API_ENTRY (line 76) | typedef CL_API_ENTRY cl_mem (CL_API_CALL *clCreateFromD3D10BufferKHR_fn)(
  type CL_API_ENTRY (line 82) | typedef CL_API_ENTRY cl_mem (CL_API_CALL *clCreateFromD3D10Texture2DKHR_...
  type CL_API_ENTRY (line 89) | typedef CL_API_ENTRY cl_mem (CL_API_CALL *clCreateFromD3D10Texture3DKHR_...
  type CL_API_ENTRY (line 96) | typedef CL_API_ENTRY cl_int (CL_API_CALL *clEnqueueAcquireD3D10ObjectsKH...
  type CL_API_ENTRY (line 104) | typedef CL_API_ENTRY cl_int (CL_API_CALL *clEnqueueReleaseD3D10ObjectsKH...

FILE: GpuMemLatency/OpenCL/include/CL/cl_d3d11.h
  type cl_uint (line 32) | typedef cl_uint cl_d3d11_device_source_khr;
  type cl_uint (line 33) | typedef cl_uint cl_d3d11_device_set_khr;
  type CL_API_ENTRY (line 67) | typedef CL_API_ENTRY cl_int (CL_API_CALL *clGetDeviceIDsFromD3D11KHR_fn)(
  type CL_API_ENTRY (line 76) | typedef CL_API_ENTRY cl_mem (CL_API_CALL *clCreateFromD3D11BufferKHR_fn)(
  type CL_API_ENTRY (line 82) | typedef CL_API_ENTRY cl_mem (CL_API_CALL *clCreateFromD3D11Texture2DKHR_...
  type CL_API_ENTRY (line 89) | typedef CL_API_ENTRY cl_mem (CL_API_CALL *clCreateFromD3D11Texture3DKHR_...
  type CL_API_ENTRY (line 96) | typedef CL_API_ENTRY cl_int (CL_API_CALL *clEnqueueAcquireD3D11ObjectsKH...
  type CL_API_ENTRY (line 104) | typedef CL_API_ENTRY cl_int (CL_API_CALL *clEnqueueReleaseD3D11ObjectsKH...

FILE: GpuMemLatency/OpenCL/include/CL/cl_dx9_media_sharing.h
  type cl_uint (line 31) | typedef cl_uint             cl_dx9_media_adapter_type_khr;
  type cl_uint (line 32) | typedef cl_uint             cl_dx9_media_adapter_set_khr;
  type cl_dx9_surface_info_khr (line 36) | typedef struct _cl_dx9_surface_info_khr
  type CL_API_ENTRY (line 79) | typedef CL_API_ENTRY cl_int (CL_API_CALL *clGetDeviceIDsFromDX9MediaAdap...
  type CL_API_ENTRY (line 89) | typedef CL_API_ENTRY cl_mem (CL_API_CALL *clCreateFromDX9MediaSurfaceKHR...
  type CL_API_ENTRY (line 97) | typedef CL_API_ENTRY cl_int (CL_API_CALL *clEnqueueAcquireDX9MediaSurfac...
  type CL_API_ENTRY (line 105) | typedef CL_API_ENTRY cl_int (CL_API_CALL *clEnqueueReleaseDX9MediaSurfac...

FILE: GpuMemLatency/OpenCL/include/CL/cl_dx9_media_sharing_intel.h
  type cl_uint (line 60) | typedef cl_uint cl_dx9_device_source_intel;
  type cl_uint (line 61) | typedef cl_uint cl_dx9_device_set_intel;

FILE: GpuMemLatency/OpenCL/include/CL/cl_egl.h
  type cl_egl_image_properties_khr (line 46) | typedef intptr_t cl_egl_image_properties_khr;

FILE: GpuMemLatency/OpenCL/include/CL/cl_ext.h
  type CL_API_ENTRY (line 105) | typedef CL_API_ENTRY cl_int
  type CL_API_ENTRY (line 132) | typedef CL_API_ENTRY cl_program
  type CL_API_ENTRY (line 181) | typedef CL_API_ENTRY cl_int
  type cl_bitfield (line 201) | typedef cl_bitfield cl_queue_properties_khr;
  type CL_API_ENTRY (line 273) | typedef CL_API_ENTRY cl_int
  type CL_API_ENTRY (line 279) | typedef CL_API_ENTRY cl_int
  type cl_ulong (line 282) | typedef cl_ulong  cl_device_partition_property_ext;
  type cl_bitfield (line 334) | typedef cl_bitfield cl_mem_migration_flags_ext;
  type CL_API_ENTRY (line 349) | typedef CL_API_ENTRY cl_int
  type cl_uint (line 375) | typedef cl_uint                                   cl_image_pitch_info_qcom;
  type cl_mem_ext_host_ptr (line 387) | typedef struct _cl_mem_ext_host_ptr
  type cl_mem_ion_host_ptr (line 413) | typedef struct _cl_mem_ion_host_ptr
  type cl_mem_android_native_buffer_host_ptr (line 434) | typedef struct _cl_mem_android_native_buffer_host_ptr
  type cl_uint (line 506) | typedef cl_uint             cl_kernel_sub_group_info;
  type cl_uint (line 551) | typedef cl_uint  cl_queue_priority_khr;
  type cl_uint (line 569) | typedef cl_uint  cl_queue_throttle_khr;
  type cl_uint (line 614) | typedef cl_uint cl_version_khr;
  type cl_name_version_khr (line 618) | typedef struct _cl_name_version_khr
  type cl_import_properties_arm (line 656) | typedef intptr_t cl_import_properties_arm;
  type cl_bitfield (line 736) | typedef cl_bitfield cl_svm_mem_flags_arm;
  type cl_uint (line 737) | typedef cl_uint     cl_kernel_exec_info_arm;
  type cl_bitfield (line 738) | typedef cl_bitfield cl_device_svm_capabilities_arm;

FILE: GpuMemLatency/OpenCL/include/CL/cl_ext_intel.h
  type _cl_accelerator_intel (line 78) | struct _cl_accelerator_intel
  type cl_uint (line 79) | typedef cl_uint cl_accelerator_type_intel;
  type cl_uint (line 80) | typedef cl_uint cl_accelerator_info_intel;
  type cl_motion_estimation_desc_intel (line 82) | typedef struct _cl_motion_estimation_desc_intel {
  type cl_bitfield (line 423) | typedef cl_bitfield cl_device_unified_shared_memory_capabilities_intel;
  type cl_bitfield (line 431) | typedef cl_bitfield cl_mem_properties_intel;
  type cl_bitfield (line 436) | typedef cl_bitfield cl_mem_alloc_flags_intel;
  type cl_uint (line 441) | typedef cl_uint cl_mem_info_intel;
  type cl_uint (line 450) | typedef cl_uint cl_unified_shared_memory_type_intel;
  type cl_uint (line 458) | typedef cl_uint cl_mem_advice_intel;
  type CL_API_ENTRY (line 483) | typedef CL_API_ENTRY void* (CL_API_CALL *
  type CL_API_ENTRY (line 500) | typedef CL_API_ENTRY void* (CL_API_CALL *
  type CL_API_ENTRY (line 518) | typedef CL_API_ENTRY void* (CL_API_CALL *
  type CL_API_ENTRY (line 532) | typedef CL_API_ENTRY cl_int (CL_API_CALL *
  type CL_API_ENTRY (line 546) | typedef CL_API_ENTRY cl_int (CL_API_CALL *
  type CL_API_ENTRY (line 561) | typedef CL_API_ENTRY cl_int (CL_API_CALL *
  type CL_API_ENTRY (line 577) | typedef CL_API_ENTRY cl_int (CL_API_CALL *
  type CL_API_ENTRY (line 598) | typedef CL_API_ENTRY cl_int (CL_API_CALL *
  type CL_API_ENTRY (line 620) | typedef CL_API_ENTRY cl_int (CL_API_CALL *
  type CL_API_ENTRY (line 646) | typedef CL_API_ENTRY cl_int (CL_API_CALL *
  type CL_API_ENTRY (line 668) | typedef CL_API_ENTRY cl_int (CL_API_CALL *

FILE: GpuMemLatency/OpenCL/include/CL/cl_gl.h
  type cl_uint (line 26) | typedef cl_uint     cl_gl_object_type;
  type cl_uint (line 27) | typedef cl_uint     cl_gl_texture_info;
  type cl_uint (line 28) | typedef cl_uint     cl_gl_platform_info;
  type __GLsync (line 29) | struct __GLsync

FILE: GpuMemLatency/OpenCL/include/CL/cl_half.h
  type cl_half_rounding_mode (line 44) | typedef enum
  function cl_half (line 61) | static inline cl_half cl_half_handle_overflow(cl_half_rounding_mode roun...
  function cl_half (line 87) | static inline cl_half cl_half_handle_underflow(cl_half_rounding_mode rou...
  function cl_half (line 109) | static inline cl_half cl_half_from_float(cl_float f, cl_half_rounding_mo...
  function cl_half (line 235) | static inline cl_half cl_half_from_double(cl_double d, cl_half_rounding_...
  function cl_float (line 361) | static inline cl_float cl_half_to_float(cl_half h)

FILE: GpuMemLatency/OpenCL/include/CL/cl_icd.h
  type CL_API_ENTRY (line 44) | typedef CL_API_ENTRY cl_int(CL_API_CALL *cl_api_clGetPlatformIDs)(
  type CL_API_ENTRY (line 48) | typedef CL_API_ENTRY cl_int(CL_API_CALL *cl_api_clGetPlatformInfo)(
  type CL_API_ENTRY (line 54) | typedef CL_API_ENTRY cl_int(CL_API_CALL *cl_api_clGetDeviceIDs)(
  type CL_API_ENTRY (line 58) | typedef CL_API_ENTRY cl_int(CL_API_CALL *cl_api_clGetDeviceInfo)(
  type CL_API_ENTRY (line 64) | typedef CL_API_ENTRY cl_int(CL_API_CALL *cl_api_clCreateSubDevices)(
  type CL_API_ENTRY (line 69) | typedef CL_API_ENTRY cl_int(CL_API_CALL *cl_api_clRetainDevice)(
  type CL_API_ENTRY (line 72) | typedef CL_API_ENTRY cl_int(CL_API_CALL *cl_api_clReleaseDevice)(
  type CL_API_ENTRY (line 84) | typedef CL_API_ENTRY cl_context(CL_API_CALL *cl_api_clCreateContext)(
  type CL_API_ENTRY (line 90) | typedef CL_API_ENTRY cl_context(CL_API_CALL *cl_api_clCreateContextFromT...
  type CL_API_ENTRY (line 95) | typedef CL_API_ENTRY cl_int(CL_API_CALL *cl_api_clRetainContext)(
  type CL_API_ENTRY (line 98) | typedef CL_API_ENTRY cl_int(CL_API_CALL *cl_api_clReleaseContext)(
  type CL_API_ENTRY (line 101) | typedef CL_API_ENTRY cl_int(CL_API_CALL *cl_api_clGetContextInfo)(
  type CL_API_ENTRY (line 106) | typedef CL_API_ENTRY cl_command_queue(CL_API_CALL *cl_api_clCreateComman...
  type CL_API_ENTRY (line 113) | typedef CL_API_ENTRY
  type CL_API_ENTRY (line 125) | typedef CL_API_ENTRY cl_int(CL_API_CALL *cl_api_clRetainCommandQueue)(
  type CL_API_ENTRY (line 128) | typedef CL_API_ENTRY cl_int(CL_API_CALL *cl_api_clReleaseCommandQueue)(
  type CL_API_ENTRY (line 131) | typedef CL_API_ENTRY cl_int(CL_API_CALL *cl_api_clGetCommandQueueInfo)(
  type CL_API_ENTRY (line 137) | typedef CL_API_ENTRY cl_mem(CL_API_CALL *cl_api_clCreateBuffer)(
  type CL_API_ENTRY (line 143) | typedef CL_API_ENTRY cl_mem(CL_API_CALL *cl_api_clCreateImage)(
  type CL_API_ENTRY (line 156) | typedef CL_API_ENTRY cl_mem(CL_API_CALL *cl_api_clCreateBufferWithProper...
  type CL_API_ENTRY (line 161) | typedef CL_API_ENTRY cl_mem(CL_API_CALL *cl_api_clCreateImageWithPropert...
  type CL_API_ENTRY (line 173) | typedef CL_API_ENTRY cl_int(CL_API_CALL *cl_api_clRetainMemObject)(
  type CL_API_ENTRY (line 176) | typedef CL_API_ENTRY cl_int(CL_API_CALL *cl_api_clReleaseMemObject)(
  type CL_API_ENTRY (line 179) | typedef CL_API_ENTRY cl_int(CL_API_CALL *cl_api_clGetSupportedImageForma...
  type CL_API_ENTRY (line 184) | typedef CL_API_ENTRY cl_int(CL_API_CALL *cl_api_clGetMemObjectInfo)(
  type CL_API_ENTRY (line 188) | typedef CL_API_ENTRY cl_int(CL_API_CALL *cl_api_clGetImageInfo)(
  type CL_API_ENTRY (line 194) | typedef CL_API_ENTRY cl_mem(CL_API_CALL *cl_api_clCreatePipe)(
  type CL_API_ENTRY (line 200) | typedef CL_API_ENTRY cl_int(CL_API_CALL *cl_api_clGetPipeInfo)(
  type CL_API_ENTRY (line 205) | typedef CL_API_ENTRY void
  type CL_API_ENTRY (line 209) | typedef CL_API_ENTRY void(CL_API_CALL *cl_api_clSVMFree)(
  type CL_API_ENTRY (line 223) | typedef CL_API_ENTRY cl_sampler(CL_API_CALL *cl_api_clCreateSampler)(
  type CL_API_ENTRY (line 228) | typedef CL_API_ENTRY cl_int(CL_API_CALL *cl_api_clRetainSampler)(
  type CL_API_ENTRY (line 231) | typedef CL_API_ENTRY cl_int(CL_API_CALL *cl_api_clReleaseSampler)(
  type CL_API_ENTRY (line 234) | typedef CL_API_ENTRY cl_int(CL_API_CALL *cl_api_clGetSamplerInfo)(
  type CL_API_ENTRY (line 240) | typedef CL_API_ENTRY
  type CL_API_ENTRY (line 253) | typedef CL_API_ENTRY cl_program(CL_API_CALL *cl_api_clCreateProgramWithS...
  type CL_API_ENTRY (line 257) | typedef CL_API_ENTRY cl_program(CL_API_CALL *cl_api_clCreateProgramWithB...
  type CL_API_ENTRY (line 264) | typedef CL_API_ENTRY
  type CL_API_ENTRY (line 275) | typedef CL_API_ENTRY cl_int(CL_API_CALL *cl_api_clRetainProgram)(
  type CL_API_ENTRY (line 278) | typedef CL_API_ENTRY cl_int(CL_API_CALL *cl_api_clReleaseProgram)(
  type CL_API_ENTRY (line 281) | typedef CL_API_ENTRY cl_int(CL_API_CALL *cl_api_clBuildProgram)(
  type CL_API_ENTRY (line 289) | typedef CL_API_ENTRY cl_int(CL_API_CALL *cl_api_clCompileProgram)(
  type CL_API_ENTRY (line 296) | typedef CL_API_ENTRY cl_program(CL_API_CALL *cl_api_clLinkProgram)(
  type CL_API_ENTRY (line 312) | typedef CL_API_ENTRY
  type CL_API_ENTRY (line 317) | typedef CL_API_ENTRY cl_int(CL_API_CALL *cl_api_clSetProgramReleaseCallb...
  type CL_API_ENTRY (line 331) | typedef CL_API_ENTRY cl_int(CL_API_CALL *cl_api_clUnloadPlatformCompiler)(
  type CL_API_ENTRY (line 340) | typedef CL_API_ENTRY cl_int(CL_API_CALL *cl_api_clGetProgramInfo)(
  type CL_API_ENTRY (line 344) | typedef CL_API_ENTRY cl_int(CL_API_CALL *cl_api_clGetProgramBuildInfo)(
  type CL_API_ENTRY (line 350) | typedef CL_API_ENTRY cl_kernel(CL_API_CALL *cl_api_clCreateKernel)(
  type CL_API_ENTRY (line 354) | typedef CL_API_ENTRY cl_int(CL_API_CALL *cl_api_clCreateKernelsInProgram)(
  type CL_API_ENTRY (line 358) | typedef CL_API_ENTRY cl_int(CL_API_CALL *cl_api_clRetainKernel)(
  type CL_API_ENTRY (line 361) | typedef CL_API_ENTRY cl_int(CL_API_CALL *cl_api_clReleaseKernel)(
  type CL_API_ENTRY (line 364) | typedef CL_API_ENTRY cl_int(CL_API_CALL *cl_api_clSetKernelArg)(
  type CL_API_ENTRY (line 368) | typedef CL_API_ENTRY cl_int(CL_API_CALL *cl_api_clGetKernelInfo)(
  type CL_API_ENTRY (line 374) | typedef CL_API_ENTRY cl_int(CL_API_CALL *cl_api_clGetKernelArgInfo)(
  type CL_API_ENTRY (line 385) | typedef CL_API_ENTRY cl_int(CL_API_CALL *cl_api_clGetKernelWorkGroupInfo)(
  type CL_API_ENTRY (line 392) | typedef CL_API_ENTRY cl_int(CL_API_CALL *cl_api_clSetKernelArgSVMPointer)(
  type CL_API_ENTRY (line 396) | typedef CL_API_ENTRY cl_int(CL_API_CALL *cl_api_clSetKernelExecInfo)(
  type CL_API_ENTRY (line 401) | typedef CL_API_ENTRY cl_int(CL_API_CALL *cl_api_clGetKernelSubGroupInfoK...
  type CL_API_ENTRY (line 417) | typedef CL_API_ENTRY cl_int(CL_API_CALL *cl_api_clWaitForEvents)(
  type CL_API_ENTRY (line 420) | typedef CL_API_ENTRY cl_int(CL_API_CALL *cl_api_clGetEventInfo)(
  type CL_API_ENTRY (line 424) | typedef CL_API_ENTRY cl_int(CL_API_CALL *cl_api_clRetainEvent)(cl_event ...
  type CL_API_ENTRY (line 427) | typedef CL_API_ENTRY cl_int(CL_API_CALL *cl_api_clReleaseEvent)(cl_event...
  type CL_API_ENTRY (line 431) | typedef CL_API_ENTRY cl_int(CL_API_CALL *cl_api_clGetEventProfilingInfo)(
  type CL_API_ENTRY (line 436) | typedef CL_API_ENTRY cl_int(CL_API_CALL *cl_api_clFlush)(
  type CL_API_ENTRY (line 439) | typedef CL_API_ENTRY cl_int(CL_API_CALL *cl_api_clFinish)(
  type CL_API_ENTRY (line 443) | typedef CL_API_ENTRY cl_int(CL_API_CALL *cl_api_clEnqueueReadBuffer)(
  type CL_API_ENTRY (line 451) | typedef CL_API_ENTRY cl_int(CL_API_CALL *cl_api_clEnqueueReadBufferRect)(
  type CL_API_ENTRY (line 465) | typedef CL_API_ENTRY cl_int(CL_API_CALL *cl_api_clEnqueueWriteBuffer)(
  type CL_API_ENTRY (line 473) | typedef CL_API_ENTRY cl_int(CL_API_CALL *cl_api_clEnqueueWriteBufferRect)(
  type CL_API_ENTRY (line 489) | typedef CL_API_ENTRY cl_int(CL_API_CALL *cl_api_clEnqueueFillBuffer)(
  type CL_API_ENTRY (line 501) | typedef CL_API_ENTRY cl_int(CL_API_CALL *cl_api_clEnqueueCopyBuffer)(
  type CL_API_ENTRY (line 509) | typedef CL_API_ENTRY cl_int(CL_API_CALL *cl_api_clEnqueueCopyBufferRect)(
  type CL_API_ENTRY (line 523) | typedef CL_API_ENTRY cl_int(CL_API_CALL *cl_api_clEnqueueReadImage)(
  type CL_API_ENTRY (line 530) | typedef CL_API_ENTRY cl_int(CL_API_CALL *cl_api_clEnqueueWriteImage)(
  type CL_API_ENTRY (line 539) | typedef CL_API_ENTRY cl_int(CL_API_CALL *cl_api_clEnqueueFillImage)(
  type CL_API_ENTRY (line 551) | typedef CL_API_ENTRY cl_int(CL_API_CALL *cl_api_clEnqueueCopyImage)(
  type CL_API_ENTRY (line 557) | typedef CL_API_ENTRY cl_int(CL_API_CALL *cl_api_clEnqueueCopyImageToBuff...
  type CL_API_ENTRY (line 563) | typedef CL_API_ENTRY cl_int(CL_API_CALL *cl_api_clEnqueueCopyBufferToIma...
  type CL_API_ENTRY (line 569) | typedef CL_API_ENTRY void
  type CL_API_ENTRY (line 575) | typedef CL_API_ENTRY void
  type CL_API_ENTRY (line 582) | typedef CL_API_ENTRY cl_int(CL_API_CALL *cl_api_clEnqueueUnmapMemObject)(
  type CL_API_ENTRY (line 589) | typedef CL_API_ENTRY cl_int(CL_API_CALL *cl_api_clEnqueueMigrateMemObjec...
  type CL_API_ENTRY (line 601) | typedef CL_API_ENTRY cl_int(CL_API_CALL *cl_api_clEnqueueNDRangeKernel)(
  type CL_API_ENTRY (line 608) | typedef CL_API_ENTRY cl_int(CL_API_CALL *cl_api_clEnqueueTask)(
  type CL_API_ENTRY (line 613) | typedef CL_API_ENTRY cl_int(CL_API_CALL *cl_api_clEnqueueNativeKernel)(
  type CL_API_ENTRY (line 622) | typedef CL_API_ENTRY cl_int(CL_API_CALL *cl_api_clEnqueueMarkerWithWaitL...
  type CL_API_ENTRY (line 627) | typedef CL_API_ENTRY cl_int(CL_API_CALL *cl_api_clEnqueueBarrierWithWait...
  type CL_API_ENTRY (line 632) | typedef CL_API_ENTRY void
  type CL_API_ENTRY (line 649) | typedef CL_API_ENTRY cl_int(CL_API_CALL *cl_api_clEnqueueSVMFree)(
  type CL_API_ENTRY (line 660) | typedef CL_API_ENTRY cl_int(CL_API_CALL *cl_api_clEnqueueSVMMemcpy)(
  type CL_API_ENTRY (line 667) | typedef CL_API_ENTRY cl_int(CL_API_CALL *cl_api_clEnqueueSVMMemFill)(
  type CL_API_ENTRY (line 674) | typedef CL_API_ENTRY cl_int(CL_API_CALL *cl_api_clEnqueueSVMMap)(
  type CL_API_ENTRY (line 681) | typedef CL_API_ENTRY cl_int(CL_API_CALL *cl_api_clEnqueueSVMUnmap)(
  type CL_API_ENTRY (line 698) | typedef CL_API_ENTRY cl_int(CL_API_CALL *cl_api_clSetCommandQueueProperty)(
  type CL_API_ENTRY (line 703) | typedef CL_API_ENTRY cl_mem(CL_API_CALL *cl_api_clCreateImage2D)(
  type CL_API_ENTRY (line 708) | typedef CL_API_ENTRY cl_mem(CL_API_CALL *cl_api_clCreateImage3D)(
  type CL_API_ENTRY (line 714) | typedef CL_API_ENTRY cl_int(CL_API_CALL *cl_api_clUnloadCompiler)(void)
  type CL_API_ENTRY (line 717) | typedef CL_API_ENTRY cl_int(CL_API_CALL *cl_api_clEnqueueMarker)(
  type CL_API_ENTRY (line 721) | typedef CL_API_ENTRY cl_int(CL_API_CALL *cl_api_clEnqueueWaitForEvents)(
  type CL_API_ENTRY (line 725) | typedef CL_API_ENTRY cl_int(CL_API_CALL *cl_api_clEnqueueBarrier)(
  type CL_API_ENTRY (line 728) | typedef CL_API_ENTRY void
  type CL_API_ENTRY (line 732) | typedef CL_API_ENTRY cl_mem(CL_API_CALL *cl_api_clCreateFromGLBuffer)(
  type CL_API_ENTRY (line 736) | typedef CL_API_ENTRY cl_mem(CL_API_CALL *cl_api_clCreateFromGLTexture)(
  type CL_API_ENTRY (line 740) | typedef CL_API_ENTRY cl_mem(CL_API_CALL *cl_api_clCreateFromGLTexture2D)(
  type CL_API_ENTRY (line 744) | typedef CL_API_ENTRY cl_mem(CL_API_CALL *cl_api_clCreateFromGLTexture3D)(
  type CL_API_ENTRY (line 748) | typedef CL_API_ENTRY cl_mem(CL_API_CALL *cl_api_clCreateFromGLRenderbuff...
  type CL_API_ENTRY (line 752) | typedef CL_API_ENTRY cl_int(CL_API_CALL *cl_api_clGetGLObjectInfo)(
  type CL_API_ENTRY (line 756) | typedef CL_API_ENTRY cl_int(CL_API_CALL *cl_api_clGetGLTextureInfo)(
  type CL_API_ENTRY (line 760) | typedef CL_API_ENTRY cl_int(CL_API_CALL *cl_api_clEnqueueAcquireGLObjects)(
  type CL_API_ENTRY (line 766) | typedef CL_API_ENTRY cl_int(CL_API_CALL *cl_api_clEnqueueReleaseGLObjects)(
  type CL_API_ENTRY (line 773) | typedef CL_API_ENTRY cl_int(CL_API_CALL *cl_api_clGetGLContextInfoKHR)(
  type CL_API_ENTRY (line 778) | typedef CL_API_ENTRY cl_event(CL_API_CALL *cl_api_clCreateEventFromGLsyn...
  type CL_API_ENTRY (line 785) | typedef CL_API_ENTRY cl_int(CL_API_CALL *cl_api_clGetDeviceIDsFromD3D10K...
  type CL_API_ENTRY (line 791) | typedef CL_API_ENTRY cl_mem(CL_API_CALL *cl_api_clCreateFromD3D10BufferK...
  type CL_API_ENTRY (line 795) | typedef CL_API_ENTRY cl_mem(CL_API_CALL *cl_api_clCreateFromD3D10Texture...
  type CL_API_ENTRY (line 799) | typedef CL_API_ENTRY cl_mem(CL_API_CALL *cl_api_clCreateFromD3D10Texture...
  type CL_API_ENTRY (line 803) | typedef CL_API_ENTRY
  type CL_API_ENTRY (line 810) | typedef CL_API_ENTRY
  type CL_API_ENTRY (line 845) | typedef CL_API_ENTRY cl_int(CL_API_CALL *cl_api_clGetDeviceIDsFromD3D11K...
  type CL_API_ENTRY (line 851) | typedef CL_API_ENTRY cl_mem(CL_API_CALL *cl_api_clCreateFromD3D11BufferK...
  type CL_API_ENTRY (line 855) | typedef CL_API_ENTRY cl_mem(CL_API_CALL *cl_api_clCreateFromD3D11Texture...
  type CL_API_ENTRY (line 859) | typedef CL_API_ENTRY cl_mem(CL_API_CALL *cl_api_clCreateFromD3D11Texture...
  type CL_API_ENTRY (line 863) | typedef CL_API_ENTRY
  type CL_API_ENTRY (line 870) | typedef CL_API_ENTRY
  type CL_API_ENTRY (line 878) | typedef CL_API_ENTRY
  type CL_API_ENTRY (line 885) | typedef CL_API_ENTRY cl_mem(CL_API_CALL *cl_api_clCreateFromDX9MediaSurf...
  type CL_API_ENTRY (line 890) | typedef CL_API_ENTRY
  type CL_API_ENTRY (line 897) | typedef CL_API_ENTRY
  type CL_API_ENTRY (line 984) | typedef CL_API_ENTRY cl_int(CL_API_CALL *cl_api_clSetEventCallback)(
  type CL_API_ENTRY (line 989) | typedef CL_API_ENTRY cl_mem(CL_API_CALL *cl_api_clCreateSubBuffer)(
  type CL_API_ENTRY (line 995) | typedef CL_API_ENTRY
  type CL_API_ENTRY (line 1002) | typedef CL_API_ENTRY cl_event(CL_API_CALL *cl_api_clCreateUserEvent)(
  type CL_API_ENTRY (line 1006) | typedef CL_API_ENTRY cl_int(CL_API_CALL *cl_api_clSetUserEventStatus)(
  type CL_API_ENTRY (line 1020) | typedef CL_API_ENTRY cl_int(CL_API_CALL *cl_api_clCreateSubDevicesEXT)(
  type CL_API_ENTRY (line 1025) | typedef CL_API_ENTRY cl_int(CL_API_CALL *cl_api_clRetainDeviceEXT)(
  type CL_API_ENTRY (line 1028) | typedef CL_API_ENTRY cl_int(CL_API_CALL *cl_api_clReleaseDeviceEXT)(
  type CL_API_ENTRY (line 1032) | typedef CL_API_ENTRY cl_mem(CL_API_CALL *cl_api_clCreateFromEGLImageKHR)(
  type CL_API_ENTRY (line 1037) | typedef CL_API_ENTRY cl_int(CL_API_CALL *cl_api_clEnqueueAcquireEGLObjec...
  type CL_API_ENTRY (line 1042) | typedef CL_API_ENTRY cl_int(CL_API_CALL *cl_api_clEnqueueReleaseEGLObjec...
  type CL_API_ENTRY (line 1048) | typedef CL_API_ENTRY cl_event(CL_API_CALL *cl_api_clCreateEventFromEGLSy...
  type CL_API_ENTRY (line 1054) | typedef CL_API_ENTRY cl_int(CL_API_CALL *cl_api_clSetDefaultDeviceComman...
  type CL_API_ENTRY (line 1058) | typedef CL_API_ENTRY cl_program(CL_API_CALL *cl_api_clCreateProgramWithIL)(
  type CL_API_ENTRY (line 1062) | typedef CL_API_ENTRY cl_int(CL_API_CALL *cl_api_clGetKernelSubGroupInfo)(
  type CL_API_ENTRY (line 1067) | typedef CL_API_ENTRY cl_kernel(CL_API_CALL *cl_api_clCloneKernel)(
  type CL_API_ENTRY (line 1070) | typedef CL_API_ENTRY cl_int(CL_API_CALL *cl_api_clEnqueueSVMMigrateMem)(
  type CL_API_ENTRY (line 1077) | typedef CL_API_ENTRY cl_int(CL_API_CALL *cl_api_clGetDeviceAndHostTimer)(
  type CL_API_ENTRY (line 1081) | typedef CL_API_ENTRY cl_int(CL_API_CALL *cl_api_clGetHostTimer)(
  type cl_icd_dispatch (line 1098) | typedef struct _cl_icd_dispatch {

FILE: GpuMemLatency/OpenCL/include/CL/cl_platform.h
  type cl_char (line 125) | typedef signed   __int8         cl_char;
  type cl_uchar (line 126) | typedef unsigned __int8         cl_uchar;
  type cl_short (line 127) | typedef signed   __int16        cl_short;
  type cl_ushort (line 128) | typedef unsigned __int16        cl_ushort;
  type cl_int (line 129) | typedef signed   __int32        cl_int;
  type cl_uint (line 130) | typedef unsigned __int32        cl_uint;
  type cl_long (line 131) | typedef signed   __int64        cl_long;
  type cl_ulong (line 132) | typedef unsigned __int64        cl_ulong;
  type cl_half (line 134) | typedef unsigned __int16        cl_half;
  type cl_float (line 135) | typedef float                   cl_float;
  type cl_double (line 136) | typedef double                  cl_double;
  type cl_char (line 227) | typedef int8_t          cl_char;
  type cl_uchar (line 228) | typedef uint8_t         cl_uchar;
  type cl_short (line 229) | typedef int16_t         cl_short;
  type cl_ushort (line 230) | typedef uint16_t        cl_ushort;
  type cl_int (line 231) | typedef int32_t         cl_int;
  type cl_uint (line 232) | typedef uint32_t        cl_uint;
  type cl_long (line 233) | typedef int64_t         cl_long;
  type cl_ulong (line 234) | typedef uint64_t        cl_ulong;
  type cl_half (line 236) | typedef uint16_t        cl_half;
  type cl_float (line 237) | typedef float           cl_float;
  type cl_double (line 238) | typedef double          cl_double;
  type cl_GLuint (line 336) | typedef unsigned int cl_GLuint;
  type cl_GLint (line 337) | typedef int          cl_GLint;
  type cl_GLenum (line 338) | typedef unsigned int cl_GLenum;
  type __cl_uchar16 (line 359) | typedef __vector unsigned char     __cl_uchar16;
  type __cl_char16 (line 360) | typedef __vector signed char       __cl_char16;
  type __cl_ushort8 (line 361) | typedef __vector unsigned short    __cl_ushort8;
  type __cl_short8 (line 362) | typedef __vector signed short      __cl_short8;
  type __cl_uint4 (line 363) | typedef __vector unsigned int      __cl_uint4;
  type __cl_int4 (line 364) | typedef __vector signed int        __cl_int4;
  type __vector (line 365) | typedef __vector float             __cl_float4;
  type __cl_float4 (line 382) | typedef float __cl_float4   __attribute__((vector_size(16)));
  type __m128 (line 384) | typedef __m128 __cl_float4;
  type cl_uchar (line 396) | typedef cl_uchar    __cl_uchar16    __attribute__((vector_size(16)));
  type cl_char (line 397) | typedef cl_char     __cl_char16     __attribute__((vector_size(16)));
  type cl_ushort (line 398) | typedef cl_ushort   __cl_ushort8    __attribute__((vector_size(16)));
  type cl_short (line 399) | typedef cl_short    __cl_short8     __attribute__((vector_size(16)));
  type cl_uint (line 400) | typedef cl_uint     __cl_uint4      __attribute__((vector_size(16)));
  type cl_int (line 401) | typedef cl_int      __cl_int4       __attribute__((vector_size(16)));
  type cl_ulong (line 402) | typedef cl_ulong    __cl_ulong2     __attribute__((vector_size(16)));
  type cl_long (line 403) | typedef cl_long     __cl_long2      __attribute__((vector_size(16)));
  type cl_double (line 404) | typedef cl_double   __cl_double2    __attribute__((vector_size(16)));
  type __m128i (line 406) | typedef __m128i __cl_uchar16;
  type __m128i (line 407) | typedef __m128i __cl_char16;
  type __m128i (line 408) | typedef __m128i __cl_ushort8;
  type __m128i (line 409) | typedef __m128i __cl_short8;
  type __m128i (line 410) | typedef __m128i __cl_uint4;
  type __m128i (line 411) | typedef __m128i __cl_int4;
  type __m128i (line 412) | typedef __m128i __cl_ulong2;
  type __m128i (line 413) | typedef __m128i __cl_long2;
  type __m128d (line 414) | typedef __m128d __cl_double2;
  type cl_uchar (line 430) | typedef cl_uchar    __cl_uchar8     __attribute__((vector_size(8)));
  type cl_char (line 431) | typedef cl_char     __cl_char8      __attribute__((vector_size(8)));
  type cl_ushort (line 432) | typedef cl_ushort   __cl_ushort4    __attribute__((vector_size(8)));
  type cl_short (line 433) | typedef cl_short    __cl_short4     __attribute__((vector_size(8)));
  type cl_uint (line 434) | typedef cl_uint     __cl_uint2      __attribute__((vector_size(8)));
  type cl_int (line 435) | typedef cl_int      __cl_int2       __attribute__((vector_size(8)));
  type cl_ulong (line 436) | typedef cl_ulong    __cl_ulong1     __attribute__((vector_size(8)));
  type cl_long (line 437) | typedef cl_long     __cl_long1      __attribute__((vector_size(8)));
  type cl_float (line 438) | typedef cl_float    __cl_float2     __attribute__((vector_size(8)));
  type __m64 (line 440) | typedef __m64       __cl_uchar8;
  type __m64 (line 441) | typedef __m64       __cl_char8;
  type __m64 (line 442) | typedef __m64       __cl_ushort4;
  type __m64 (line 443) | typedef __m64       __cl_short4;
  type __m64 (line 444) | typedef __m64       __cl_uint2;
  type __m64 (line 445) | typedef __m64       __cl_int2;
  type __m64 (line 446) | typedef __m64       __cl_ulong1;
  type __m64 (line 447) | typedef __m64       __cl_long1;
  type __m64 (line 448) | typedef __m64       __cl_float2;
  type cl_float (line 468) | typedef cl_float    __cl_float8     __attribute__((vector_size(32)));
  type cl_double (line 469) | typedef cl_double   __cl_double4    __attribute__((vector_size(32)));
  type __m256 (line 471) | typedef __m256      __cl_float8;
  type __m256d (line 472) | typedef __m256d     __cl_double4;
  type cl_char2 (line 526) | typedef union
  type cl_char4 (line 539) | typedef union
  type cl_char4 (line 556) | typedef  cl_char4  cl_char3;
  type cl_char8 (line 558) | typedef union
  type cl_char16 (line 577) | typedef union
  type cl_uchar2 (line 601) | typedef union
  type cl_uchar4 (line 614) | typedef union
  type cl_uchar4 (line 631) | typedef  cl_uchar4  cl_uchar3;
  type cl_uchar8 (line 633) | typedef union
  type cl_uchar16 (line 652) | typedef union
  type cl_short2 (line 676) | typedef union
  type cl_short4 (line 689) | typedef union
  type cl_short4 (line 706) | typedef  cl_short4  cl_short3;
  type cl_short8 (line 708) | typedef union
  type cl_short16 (line 727) | typedef union
  type cl_ushort2 (line 751) | typedef union
  type cl_ushort4 (line 764) | typedef union
  type cl_ushort4 (line 781) | typedef  cl_ushort4  cl_ushort3;
  type cl_ushort8 (line 783) | typedef union
  type cl_ushort16 (line 802) | typedef union
  type cl_half2 (line 826) | typedef union
  type cl_half4 (line 839) | typedef union
  type cl_half4 (line 856) | typedef  cl_half4  cl_half3;
  type cl_half8 (line 858) | typedef union
  type cl_half16 (line 877) | typedef union
  type cl_int2 (line 900) | typedef union
  type cl_int4 (line 913) | typedef union
  type cl_int4 (line 930) | typedef  cl_int4  cl_int3;
  type cl_int8 (line 932) | typedef union
  type cl_int16 (line 951) | typedef union
  type cl_uint2 (line 975) | typedef union
  type cl_uint4 (line 988) | typedef union
  type cl_uint4 (line 1005) | typedef  cl_uint4  cl_uint3;
  type cl_uint8 (line 1007) | typedef union
  type cl_uint16 (line 1026) | typedef union
  type cl_long2 (line 1049) | typedef union
  type cl_long4 (line 1062) | typedef union
  type cl_long4 (line 1079) | typedef  cl_long4  cl_long3;
  type cl_long8 (line 1081) | typedef union
  type cl_long16 (line 1100) | typedef union
  type cl_ulong2 (line 1124) | typedef union
  type cl_ulong4 (line 1137) | typedef union
  type cl_ulong4 (line 1154) | typedef  cl_ulong4  cl_ulong3;
  type cl_ulong8 (line 1156) | typedef union
  type cl_ulong16 (line 1175) | typedef union
  type cl_float2 (line 1200) | typedef union
  type cl_float4 (line 1213) | typedef union
  type cl_float4 (line 1230) | typedef  cl_float4  cl_float3;
  type cl_float8 (line 1232) | typedef union
  type cl_float16 (line 1251) | typedef union
  type cl_double2 (line 1275) | typedef union
  type cl_double4 (line 1288) | typedef union
  type cl_double4 (line 1305) | typedef  cl_double4  cl_double3;
  type cl_double8 (line 1307) | typedef union
  type cl_double16 (line 1326) | typedef union

FILE: GpuMemLatency/OpenCL/include/CL/cl_va_api_media_sharing_intel.h
  type cl_uint (line 84) | typedef cl_uint cl_va_api_device_source_intel;
  type cl_uint (line 85) | typedef cl_uint cl_va_api_device_set_intel;

FILE: GpuMemLatency/atomic_test.c
  function int_atomic_latency_test (line 3) | float int_atomic_latency_test(cl_context context,
  function c2c_atomic_latency_test (line 53) | float c2c_atomic_latency_test(cl_context context,
  function int_atomic_add_test (line 131) | float int_atomic_add_test(cl_context context,

FILE: GpuMemLatency/bw_test.c
  function bw_test (line 3) | float bw_test(cl_context context,
  function tex_bw_test (line 135) | float tex_bw_test(cl_context context,
  function local_bw_test (line 253) | float local_bw_test(cl_context context,
  function buffer_bw_test (line 332) | float buffer_bw_test(cl_context context,
  function local_chase_bw_test (line 427) | float local_chase_bw_test(cl_context context,
  function local_64_bw_test (line 508) | float local_64_bw_test(cl_context context,
  function link_bw_test (line 588) | void link_bw_test(cl_context context,

FILE: GpuMemLatency/common.c
  function FillPatternArr (line 9) | void FillPatternArr(uint32_t* pattern_arr, uint32_t list_size, uint32_t ...
  function cl_uint (line 26) | cl_uint getCuCount() {
  function getMaxWorkgroupSize (line 38) | size_t getMaxWorkgroupSize()
  function cl_ulong (line 51) | cl_ulong get_max_constant_buffer_size() {
  function cl_ulong (line 60) | cl_ulong get_max_buffer_size() {
  function cl_ulong (line 69) | cl_ulong get_max_tex_buffer_size() {
  function cl_ulong (line 78) | cl_ulong get_max_2d_tex_width() {
  function cl_ulong (line 87) | cl_ulong get_max_2d_tex_height() {
  function checkExtensionSupport (line 96) | short checkExtensionSupport(const char *extension_name) {
  function cl_context (line 153) | cl_context get_context_from_user(int platform_index, int device_index) {
  function cl_program (line 271) | cl_program build_program(cl_context context, const char* fname, const ch...
  function write_program (line 304) | void write_program(cl_program program, const char *name)
  function adjust_iterations (line 364) | uint32_t adjust_iterations(uint32_t iterations, uint64_t time_ms)

FILE: GpuMemLatency/instruction_rate.c
  function instruction_rate_test (line 51) | float instruction_rate_test(cl_context context,
  function run_rate_test (line 290) | float run_rate_test(cl_context context,
  function run_divergence_rate_test (line 355) | float run_divergence_rate_test(cl_context context,
  function run_latency_test (line 459) | float run_latency_test(cl_context context,
  function fp64_instruction_rate_test (line 537) | float fp64_instruction_rate_test(cl_context context,
  function fp16_instruction_rate_test (line 584) | float fp16_instruction_rate_test(cl_context context,

FILE: GpuMemLatency/latency_test.c
  function latency_test (line 4) | float latency_test(cl_context context,
  function tex_latency_test (line 132) | float tex_latency_test(cl_context context,

FILE: GpuMemLatency/opencltest.c
  type TestType (line 26) | enum TestType {
  function main (line 56) | int main(int argc, char* argv[]) {
  function scale_iterations (line 906) | uint64_t scale_iterations(uint32_t size_kb, uint64_t iterations) {
  function int_exec_latency_test (line 911) | float int_exec_latency_test(cl_context context,
  function scale_bw_iterations (line 955) | uint32_t scale_bw_iterations(uint32_t base_iterations, uint32_t size_kb)

FILE: InstructionRate/arm_instructionrate.c
  function main (line 130) | int main(int argc, char *argv[]) {
  type TestThreadData (line 257) | struct TestThreadData {
  type TestThreadData (line 263) | struct TestThreadData
  type TestThreadData (line 263) | struct TestThreadData
  function measureFunction (line 272) | float measureFunction(uint64_t iterations, float clockSpeedGhz, uint64_t...
  function vecadd128wrapper (line 304) | uint64_t vecadd128wrapper(uint64_t iterations) {
  function vecmul128wrapper (line 308) | uint64_t vecmul128wrapper(uint64_t iterations) {
  function latvecadd128wrapper (line 312) | uint64_t latvecadd128wrapper(uint64_t iterations) {
  function latvecmul128wrapper (line 316) | uint64_t latvecmul128wrapper(uint64_t iterations) {
  function mixvecaddmul128wrapper (line 320) | uint64_t mixvecaddmul128wrapper(uint64_t iterations) {
  function faddwrapper (line 324) | uint64_t faddwrapper(uint64_t iterations) {
  function latfaddwrapper (line 328) | uint64_t latfaddwrapper(uint64_t iterations) {
  function latvecfadd128wrapper (line 332) | uint64_t latvecfadd128wrapper(uint64_t iterations) {
  function latvecfmul128wrapper (line 336) | uint64_t latvecfmul128wrapper(uint64_t iterations) {
  function vecfadd128wrapper (line 340) | uint64_t vecfadd128wrapper(uint64_t iterations) {
  function vecfmul128wrapper (line 344) | uint64_t vecfmul128wrapper(uint64_t iterations) {
  function mixvecfaddfmul128wrapper (line 347) | uint64_t mixvecfaddfmul128wrapper(uint64_t iterations) {
  function mixaddvecadd128wrapper (line 351) | uint64_t mixaddvecadd128wrapper(uint64_t iterations) {
  function mix3to1addvecadd128wrapper (line 355) | uint64_t mix3to1addvecadd128wrapper(uint64_t iterations) {
  function mix1to1addvecadd128wrapper (line 359) | uint64_t mix1to1addvecadd128wrapper(uint64_t iterations) {
  function mixmulvecmulwrapper (line 363) | uint64_t mixmulvecmulwrapper(uint64_t iterations) {
  function mixvecmulfmulwrapper (line 367) | uint64_t mixvecmulfmulwrapper(uint64_t iterations) {
  function mixvecaddfaddwrapper (line 371) | uint64_t mixvecaddfaddwrapper(uint64_t iterations) {
  function mixjmpvecaddwrapper (line 375) | uint64_t mixjmpvecaddwrapper(uint64_t iterations) {
  function mixjmpvecmulwrapper (line 379) | uint64_t mixjmpvecmulwrapper(uint64_t iterations) {
  function vecloadwrapper (line 383) | uint64_t vecloadwrapper(uint64_t iterations) {
  function vecstorewrapper (line 387) | uint64_t vecstorewrapper(uint64_t iterations) {
  function loadwrapper (line 391) | uint64_t loadwrapper(uint64_t iterations) {
  function mixloadstorewrapper (line 399) | uint64_t mixloadstorewrapper(uint64_t iterations) {
  function mix21loadstorewrapper (line 403) | uint64_t mix21loadstorewrapper(uint64_t iterations) {
  function vecfma128wrapper (line 407) | uint64_t vecfma128wrapper(uint64_t iterations) {
  function scalarfmawrapper (line 411) | uint64_t scalarfmawrapper(uint64_t iterations) {
  function latscalarfmawrapper (line 415) | uint64_t latscalarfmawrapper(uint64_t iterations) {
  function latvecfma128wrapper (line 419) | uint64_t latvecfma128wrapper(uint64_t iterations) {
  function mixvecfmulfma128wrapper (line 423) | uint64_t mixvecfmulfma128wrapper(uint64_t iterations) {
  function mixvecfaddfma128wrapper (line 427) | uint64_t mixvecfaddfma128wrapper(uint64_t iterations) {
  function aesetestwrapper (line 431) | uint64_t aesetestwrapper(uint64_t iterations) {
  function mixaesevecadd128wrapper (line 435) | uint64_t mixaesevecadd128wrapper(uint64_t iterations) {
  function pmullwrapper (line 439) | uint64_t pmullwrapper(uint64_t iterations) {
  function mixpmulladd128wrapper (line 443) | uint64_t mixpmulladd128wrapper(uint64_t iterations) {

FILE: InstructionRate/riscv_instructionrate.c
  function main (line 27) | int main(int argc, char *argv[]) {
  function measureFunction (line 73) | float measureFunction(uint64_t iterations, float clockSpeedGhz, void *ar...

FILE: InstructionRate/x86_fusion.c
  function main (line 32) | int main(int argc, char *argv[]) {
  function measureFunction (line 73) | float measureFunction(uint64_t iterations, float clockSpeedGhz,  __attri...

FILE: InstructionRate/x86_instructionrate.c
  function main (line 157) | int main(int argc, char *argv[]) {
  type TestThreadData (line 502) | struct TestThreadData {
  type TestThreadData (line 508) | struct TestThreadData
  type TestThreadData (line 508) | struct TestThreadData
  function measureFunction (line 513) | float measureFunction(uint64_t iterations, float clockSpeedGhz,  __attri...
  function load128wrapper (line 546) | __attribute((sysv_abi)) uint64_t load128wrapper(uint64_t iterations) {
  function spacedload128wrapper (line 550) | __attribute((sysv_abi)) uint64_t spacedload128wrapper(uint64_t iteration...
  function spacedstorescalarwrapper (line 554) | __attribute((sysv_abi)) uint64_t spacedstorescalarwrapper(uint64_t itera...
  function load256wrapper (line 558) | __attribute((sysv_abi)) uint64_t load256wrapper(uint64_t iterations) {
  function loadscalarwrapper (line 562) | __attribute((sysv_abi)) uint64_t loadscalarwrapper(uint64_t iterations) {
  function mixedscalarloadstorewrapper (line 566) | __attribute((sysv_abi)) uint64_t mixedscalarloadstorewrapper(uint64_t it...
  function load512wrapper (line 571) | __attribute((sysv_abi)) uint64_t load512wrapper(uint64_t iterations) {
  function spacedload256wrapper (line 575) | __attribute((sysv_abi)) uint64_t spacedload256wrapper(uint64_t iteration...
  function store128wrapper (line 579) | __attribute((sysv_abi)) uint64_t store128wrapper(uint64_t iterations) {
  function store256wrapper (line 583) | __attribute((sysv_abi)) uint64_t store256wrapper(uint64_t iterations) {
  function store512wrapper (line 587) | __attribute((sysv_abi)) uint64_t store512wrapper(uint64_t iterations) {
  function mixfmaandmem256wrapper (line 591) | __attribute((sysv_abi)) uint64_t mixfmaandmem256wrapper(uint64_t iterati...
  function mixfmaaddmem256wrapper (line 595) | __attribute((sysv_abi)) uint64_t mixfmaaddmem256wrapper(uint64_t iterati...
  function memrenamewrapper (line 598) | __attribute((sysv_abi)) uint64_t memrenamewrapper(uint64_t iterations) {

FILE: LoadedMemoryLatency/LoadedMemoryLatency.c
  type TestMethod (line 17) | enum TestMethod {
  type BandwidthTestThreadData (line 22) | struct BandwidthTestThreadData {
  type LatencyTestData (line 32) | struct LatencyTestData {
  type TestMethod (line 57) | enum TestMethod
  function main (line 59) | int main(int argc, char *argv[]) {
  function RunBandwidthOnlyTest (line 242) | float RunBandwidthOnlyTest(cpu_set_t bwAffinity, int bwThreadCount, int ...
  function RunTest (line 295) | float RunTest(cpu_set_t latencyAffinity, cpu_set_t bwAffinity, int bwThr...
  function FillPatternArr (line 385) | void FillPatternArr(uint32_t *pattern_arr, uint32_t list_size, uint32_t ...
  type timeval (line 407) | struct timeval
  type timezone (line 408) | struct timezone
  type LatencyTestData (line 409) | struct LatencyTestData
  type LatencyTestData (line 409) | struct LatencyTestData
  type BandwidthTestThreadData (line 433) | struct BandwidthTestThreadData
  type BandwidthTestThreadData (line 433) | struct BandwidthTestThreadData
  type BandwidthTestThreadData (line 442) | struct BandwidthTestThreadData
  type BandwidthTestThreadData (line 442) | struct BandwidthTestThreadData

FILE: LoadedMemoryLatency/LoadedMemoryLatency/LoadedMemoryLatency.cpp
  type BandwidthTestThreadData (line 12) | struct BandwidthTestThreadData {
  type LatencyTestData (line 20) | struct LatencyTestData {
  function main (line 45) | int main(int argc, char* argv[]) {
  function RunTest (line 155) | float RunTest(uint64_t latencyAffinity, uint64_t bwAffinity, int bwThrea...
  function FillPatternArr (line 238) | void FillPatternArr(uint32_t* pattern_arr, uint32_t list_size, uint32_t ...
  function DWORD (line 259) | DWORD RunLatencyTest(void* param) {
  function DWORD (line 280) | DWORD FillBandwidthTestArr(void* param) {
  function DWORD (line 291) | DWORD ReadBandwidthTestThread(void* param) {
  function SetupMonitoring (line 304) | void SetupMonitoring() {
  function ReadMsr (line 312) | uint64_t ReadMsr(uint32_t index)
  function WriteMsr (line 325) | void WriteMsr(uint32_t index, uint64_t value)
  function ClearL3Counters (line 347) | void ClearL3Counters() {
  function StartMonitoring (line 354) | void StartMonitoring() {
  function EndMonitoring (line 375) | void EndMonitoring() {
  function CloseMonitoring (line 395) | void CloseMonitoring()
  function GetPrivilege (line 401) | bool GetPrivilege()

FILE: MemoryBandwidth/MemoryBandwidth.c
  type BandwidthTestThreadData (line 48) | typedef struct BandwidthTestThreadData {
  function instr_read (line 102) | float instr_read(float *arr, uint64_t arr_length, uint64_t iterations, u...
  function else (line 393) | else if (numa == NUMA_CROSSNODE) {
  function GetIterationCount (line 480) | uint64_t GetIterationCount(uint64_t testSize, uint64_t threads)
  function WriteReturn8BBlock (line 492) | void WriteReturn8BBlock(char *dst) {
  function FillInstructionArray (line 500) | void FillInstructionArray(uint64_t *nops, uint64_t sizeKb, int nopSize, ...
  function MeasureBw (line 637) | float MeasureBw(uint64_t sizeKb, uint64_t iterations, uint64_t threads, ...
  function scalar_read (line 868) | float scalar_read(float* arr, uint64_t arr_length, uint64_t iterations, ...

FILE: MemoryBandwidth/MemoryBandwidth/MemoryBandwidth.cpp
  type NopType (line 33) | enum NopType { None, FourByte, EightByte, K8_FourByte, Branch16, TenByte...
  type BandwidthTestThreadData (line 35) | struct BandwidthTestThreadData {
  type NopType (line 77) | enum NopType
  type NopType (line 78) | enum NopType
  type NopType (line 79) | enum NopType
  function main (line 95) | int main(int argc, char *argv[]) {
  function GetIterationCount (line 369) | uint32_t GetIterationCount(uint32_t testSize, uint32_t threads)
  function MeasureBw (line 382) | float MeasureBw(uint32_t sizeKb, uint32_t iterations, uint32_t threads, ...
  function FillInstructionArray (line 530) | void FillInstructionArray(uint64_t* arr, uint64_t sizeKb, enum NopType n...
  function instr_read (line 597) | float __fastcall instr_read(void* arr, uint32_t arr_length, uint32_t ite...
  function scalar_read (line 607) | float __fastcall scalar_read(void* a, uint32_t arr_length, uint32_t iter...
  function sse_read (line 634) | float sse_read(float* arr, uint64_t arr_length, uint64_t iterations) {
  function avx_read (line 678) | float avx_read(float* arr, uint64_t arr_length, uint64_t iterations) {
  function DWORD (line 722) | DWORD WINAPI ReadBandwidthTestThread(LPVOID param) {
  function PrintNumaInfo (line 729) | void PrintNumaInfo() {
  function GetStripeNode (line 761) | char GetStripeNode(uint64_t threadIdx) {
  function GetSeqNode (line 771) | char GetSeqNode(uint64_t threadIdx) {

FILE: MemoryBandwidth/MixedMemoryBandwidthTest/MemoryBandwidth.h
  function instr_read (line 9) | float __fastcall instr_read(void* arr, uint64_t arr_length, uint64_t ite...
  type InstructionTestType (line 20) | enum InstructionTestType { None, FourByte, EightByte, K8_FourByte, Branc...
  type BandwidthTestThreadData (line 21) | struct BandwidthTestThreadData {
  function auto_set_bw_func (line 33) | void auto_set_bw_func()
  function FillInstructionArray (line 54) | void FillInstructionArray(uint64_t* arr, uint64_t sizeKb, enum Instructi...
  function GetIterationCount (line 107) | uint32_t GetIterationCount(uint32_t testSize, uint32_t threads)

FILE: MemoryBandwidth/MixedMemoryBandwidthTest/MixedMemoryBandwidthTest.cpp
  type InstructionTestType (line 16) | enum InstructionTestType
  function main (line 18) | int main(int argc, char *argv[])
  function DWORD (line 50) | DWORD WINAPI ReadBandwidthTestThread(LPVOID param) {
  function Measure2TBw (line 61) | double Measure2TBw(uint32_t sizeKb, uint32_t iterations, int shared, enu...

FILE: MemoryLatency/MemoryLatency.c
  function posix_memalign (line 37) | int posix_memalign(void **memptr, size_t alignment, size_t size)
  function main (line 100) | int main(int argc, char* argv[]) {
  function scale_iterations (line 377) | uint64_t scale_iterations(uint32_t size_kb, uint32_t iterations) {
  function FillPageByPage (line 384) | void FillPageByPage(uint32_t *pattern_arr, uint32_t list_size, uint32_t ...
  function FillPageByPage64 (line 420) | void FillPageByPage64(uint64_t *pattern_arr, uint32_t list_size, uint32_...
  function FillPatternArr (line 457) | void FillPatternArr(uint32_t *pattern_arr, uint32_t list_size, uint32_t ...
  function FillPatternArr64 (line 478) | void FillPatternArr64(uint64_t *pattern_arr, uint64_t list_size, uint64_...
  function RunTest (line 497) | float RunTest(uint32_t size_kb, uint32_t iterations, uint32_t *prealloca...
  function RunAopTest (line 535) | float RunAopTest(uint32_t size_kb, uint32_t iterations, uint32_t *preall...
  function RunMlpTest (line 590) | float RunMlpTest(uint32_t size_kb, uint32_t iterations, uint32_t paralle...
  function RunAsmTest (line 641) | float RunAsmTest(uint32_t size_kb, uint32_t iterations, uint32_t *preall...
  function RunTlbTest (line 692) | float RunTlbTest(uint32_t size_kb, uint32_t iterations, uint32_t *preall...
  function RunStlfTest (line 779) | void RunStlfTest(uint32_t iterations, int mode, int pageEnd, int loadDis...

FILE: MemoryLatency/MemoryLatency.cpp
  function main (line 27) | int main(int argc, char* argv[]) {
  function scale_iterations (line 143) | uint64_t scale_iterations(uint32_t size_kb, uint64_t iterations) {
  function FillPatternArr (line 147) | void FillPatternArr(uint32_t* pattern_arr, uint32_t list_size, uint32_t ...
  function FillPatternArr64 (line 164) | void FillPatternArr64(uint64_t* pattern_arr, uint64_t list_size, uint64_...
  function RunAsmTest (line 181) | float RunAsmTest(uint32_t size_kb, uint64_t iterations, void* mem) {
  function RunTest (line 209) | float RunTest(uint32_t size_kb, uint64_t iterations, void *mem) {
  function GetPrivilege (line 253) | bool GetPrivilege()

FILE: mt_instructionrate/arm_mt_instructionrate.c
  function RunTests (line 12) | void RunTests() {

FILE: mt_instructionrate/mt_instructionrate.c
  type TestThreadData (line 26) | struct TestThreadData {
  function main (line 57) | int main(int argc, char *argv[]) {
  function measureFunction (line 106) | float measureFunction(uint64_t baseIterations, uint64_t (*testFunc)(uint...
  type TestThreadData (line 186) | struct TestThreadData
  type TestThreadData (line 186) | struct TestThreadData
  type timeval (line 196) | struct timeval
  type timeb (line 198) | struct timeb

FILE: mt_instructionrate/ppc64_mt_instructionrate.c
  function RunTests (line 9) | void RunTests() {

FILE: mt_instructionrate/x86_mt_instructionrate.c
  function RunTests (line 50) | void RunTests() {

FILE: svm/OpenCL/include/CL/Utils/Context.hpp
  type cl (line 11) | namespace cl {
    type util (line 12) | namespace util {

FILE: svm/OpenCL/include/CL/Utils/Detail.hpp
  type cl (line 9) | namespace cl {
    type util (line 10) | namespace util {
      type detail (line 11) | namespace detail {
        function F (line 14) | F for_each_arg(F f, Args&&... args)
        type impl (line 21) | namespace impl {
          function for_each_in_tuple (line 24) | void for_each_in_tuple(T&& t, F&& f,
          function transform_tuple (line 45) | auto transform_tuple(Tuple&& t, F&& f, std::index_sequence<Is...>)
          function apply (line 64) | auto apply(F&& f, Tuple&& args, std::index_sequence<I...>)
        function for_each_in_tuple (line 34) | void for_each_in_tuple(std::tuple<Ts...> const& t, F&& f)
        type impl (line 41) | namespace impl {
          function for_each_in_tuple (line 24) | void for_each_in_tuple(T&& t, F&& f,
          function transform_tuple (line 45) | auto transform_tuple(Tuple&& t, F&& f, std::index_sequence<Is...>)
          function apply (line 64) | auto apply(F&& f, Tuple&& args, std::index_sequence<I...>)
        function transform_tuple (line 51) | auto transform_tuple(const std::tuple<Args...>& t, F&& f)
        type impl (line 58) | namespace impl {
          function for_each_in_tuple (line 24) | void for_each_in_tuple(T&& t, F&& f,
          function transform_tuple (line 45) | auto transform_tuple(Tuple&& t, F&& f, std::index_sequence<Is...>)
          function apply (line 64) | auto apply(F&& f, Tuple&& args, std::index_sequence<I...>)
        function apply (line 75) | auto apply(F&& f, Tuple&& args)

FILE: svm/OpenCL/include/CL/Utils/Device.hpp
  type cl (line 8) | namespace cl {
    type util (line 9) | namespace util {

FILE: svm/OpenCL/include/CL/Utils/Error.hpp
  type cl (line 12) | namespace cl {
    type util (line 13) | namespace util {
      class Error (line 20) | class Error : public std::exception {
        method Error (line 35) | Error(cl_int err, const char* errStr = NULL): err_(err), errStr_(e...
        method cl_int (line 60) | cl_int err(void) const { return err_; }
      type detail (line 64) | namespace detail {

FILE: svm/OpenCL/include/CL/Utils/Event.hpp
  type cl (line 12) | namespace cl {
    type util (line 13) | namespace util {
      function get_duration (line 15) | auto get_duration(cl::Event& ev)

FILE: svm/OpenCL/include/CL/Utils/File.hpp
  type cl (line 12) | namespace cl {
    type util (line 13) | namespace util {

FILE: svm/OpenCL/include/CL/Utils/InteropContext.hpp
  type cl (line 8) | namespace cl {
    type util (line 9) | namespace util {

FILE: svm/OpenCL/include/CL/Utils/Platform.hpp
  type cl (line 8) | namespace cl {
    type util (line 9) | namespace util {

FILE: svm/OpenCL/include/CL/cl.h
  type _cl_platform_id (line 29) | struct _cl_platform_id
  type _cl_device_id (line 30) | struct _cl_device_id
  type _cl_context (line 31) | struct _cl_context
  type _cl_command_queue (line 32) | struct _cl_command_queue
  type _cl_mem (line 33) | struct _cl_mem
  type _cl_program (line 34) | struct _cl_program
  type _cl_kernel (line 35) | struct _cl_kernel
  type _cl_event (line 36) | struct _cl_event
  type _cl_sampler (line 37) | struct _cl_sampler
  type cl_uint (line 39) | typedef cl_uint             cl_bool;
  type cl_ulong (line 40) | typedef cl_ulong            cl_bitfield;
  type cl_ulong (line 41) | typedef cl_ulong            cl_properties;
  type cl_bitfield (line 42) | typedef cl_bitfield         cl_device_type;
  type cl_uint (line 43) | typedef cl_uint             cl_platform_info;
  type cl_uint (line 44) | typedef cl_uint             cl_device_info;
  type cl_bitfield (line 45) | typedef cl_bitfield         cl_device_fp_config;
  type cl_uint (line 46) | typedef cl_uint             cl_device_mem_cache_type;
  type cl_uint (line 47) | typedef cl_uint             cl_device_local_mem_type;
  type cl_bitfield (line 48) | typedef cl_bitfield         cl_device_exec_capabilities;
  type cl_bitfield (line 50) | typedef cl_bitfield         cl_device_svm_capabilities;
  type cl_bitfield (line 52) | typedef cl_bitfield         cl_command_queue_properties;
  type cl_device_partition_property (line 54) | typedef intptr_t            cl_device_partition_property;
  type cl_bitfield (line 55) | typedef cl_bitfield         cl_device_affinity_domain;
  type cl_context_properties (line 58) | typedef intptr_t            cl_context_properties;
  type cl_uint (line 59) | typedef cl_uint             cl_context_info;
  type cl_properties (line 61) | typedef cl_properties       cl_queue_properties;
  type cl_uint (line 63) | typedef cl_uint             cl_command_queue_info;
  type cl_uint (line 64) | typedef cl_uint             cl_channel_order;
  type cl_uint (line 65) | typedef cl_uint             cl_channel_type;
  type cl_bitfield (line 66) | typedef cl_bitfield         cl_mem_flags;
  type cl_bitfield (line 68) | typedef cl_bitfield         cl_svm_mem_flags;
  type cl_uint (line 70) | typedef cl_uint             cl_mem_object_type;
  type cl_uint (line 71) | typedef cl_uint             cl_mem_info;
  type cl_bitfield (line 73) | typedef cl_bitfield         cl_mem_migration_flags;
  type cl_uint (line 75) | typedef cl_uint             cl_image_info;
  type cl_uint (line 77) | typedef cl_uint             cl_buffer_create_type;
  type cl_uint (line 79) | typedef cl_uint             cl_addressing_mode;
  type cl_uint (line 80) | typedef cl_uint             cl_filter_mode;
  type cl_uint (line 81) | typedef cl_uint             cl_sampler_info;
  type cl_bitfield (line 82) | typedef cl_bitfield         cl_map_flags;
  type cl_pipe_properties (line 84) | typedef intptr_t            cl_pipe_properties;
  type cl_uint (line 85) | typedef cl_uint             cl_pipe_info;
  type cl_uint (line 87) | typedef cl_uint             cl_program_info;
  type cl_uint (line 88) | typedef cl_uint             cl_program_build_info;
  type cl_uint (line 90) | typedef cl_uint             cl_program_binary_type;
  type cl_int (line 92) | typedef cl_int              cl_build_status;
  type cl_uint (line 93) | typedef cl_uint             cl_kernel_info;
  type cl_uint (line 95) | typedef cl_uint             cl_kernel_arg_info;
  type cl_uint (line 96) | typedef cl_uint             cl_kernel_arg_address_qualifier;
  type cl_uint (line 97) | typedef cl_uint             cl_kernel_arg_access_qualifier;
  type cl_bitfield (line 98) | typedef cl_bitfield         cl_kernel_arg_type_qualifier;
  type cl_uint (line 100) | typedef cl_uint             cl_kernel_work_group_info;
  type cl_uint (line 102) | typedef cl_uint             cl_kernel_sub_group_info;
  type cl_uint (line 104) | typedef cl_uint             cl_event_info;
  type cl_uint (line 105) | typedef cl_uint             cl_command_type;
  type cl_uint (line 106) | typedef cl_uint             cl_profiling_info;
  type cl_properties (line 108) | typedef cl_properties       cl_sampler_properties;
  type cl_uint (line 109) | typedef cl_uint             cl_kernel_exec_info;
  type cl_bitfield (line 112) | typedef cl_bitfield         cl_device_atomic_capabilities;
  type cl_bitfield (line 113) | typedef cl_bitfield         cl_device_device_enqueue_capabilities;
  type cl_uint (line 114) | typedef cl_uint             cl_khronos_vendor_id;
  type cl_properties (line 115) | typedef cl_properties cl_mem_properties;
  type cl_uint (line 117) | typedef cl_uint cl_version;
  type cl_image_format (line 119) | typedef struct _cl_image_format {

FILE: svm/OpenCL/include/CL/cl_d3d10.h
  type cl_uint (line 71) | typedef cl_uint             cl_d3d10_device_source_khr;
  type cl_uint (line 72) | typedef cl_uint             cl_d3d10_device_set_khr;
  type cl_int (line 103) | typedef cl_int CL_API_CALL
  type clGetDeviceIDsFromD3D10KHR_t (line 113) | typedef clGetDeviceIDsFromD3D10KHR_t *
  type cl_mem (line 116) | typedef cl_mem CL_API_CALL
  type clCreateFromD3D10BufferKHR_t (line 123) | typedef clCreateFromD3D10BufferKHR_t *
  type cl_mem (line 126) | typedef cl_mem CL_API_CALL
  type clCreateFromD3D10Texture2DKHR_t (line 134) | typedef clCreateFromD3D10Texture2DKHR_t *
  type cl_mem (line 137) | typedef cl_mem CL_API_CALL
  type clCreateFromD3D10Texture3DKHR_t (line 145) | typedef clCreateFromD3D10Texture3DKHR_t *
  type cl_int (line 148) | typedef cl_int CL_API_CALL
  type clEnqueueAcquireD3D10ObjectsKHR_t (line 157) | typedef clEnqueueAcquireD3D10ObjectsKHR_t *
  type cl_int (line 160) | typedef cl_int CL_API_CALL
  type clEnqueueReleaseD3D10ObjectsKHR_t (line 169) | typedef clEnqueueReleaseD3D10ObjectsKHR_t *
  type cl_int (line 239) | typedef cl_int CL_API_CALL
  type clGetSupportedD3D10TextureFormatsINTEL_t (line 248) | typedef clGetSupportedD3D10TextureFormatsINTEL_t *

FILE: svm/OpenCL/include/CL/cl_d3d11.h
  type cl_uint (line 71) | typedef cl_uint             cl_d3d11_device_source_khr;
  type cl_uint (line 72) | typedef cl_uint             cl_d3d11_device_set_khr;
  type cl_int (line 103) | typedef cl_int CL_API_CALL
  type clGetDeviceIDsFromD3D11KHR_t (line 113) | typedef clGetDeviceIDsFromD3D11KHR_t *
  type cl_mem (line 116) | typedef cl_mem CL_API_CALL
  type clCreateFromD3D11BufferKHR_t (line 123) | typedef clCreateFromD3D11BufferKHR_t *
  type cl_mem (line 126) | typedef cl_mem CL_API_CALL
  type clCreateFromD3D11Texture2DKHR_t (line 134) | typedef clCreateFromD3D11Texture2DKHR_t *
  type cl_mem (line 137) | typedef cl_mem CL_API_CALL
  type clCreateFromD3D11Texture3DKHR_t (line 145) | typedef clCreateFromD3D11Texture3DKHR_t *
  type cl_int (line 148) | typedef cl_int CL_API_CALL
  type clEnqueueAcquireD3D11ObjectsKHR_t (line 157) | typedef clEnqueueAcquireD3D11ObjectsKHR_t *
  type cl_int (line 160) | typedef cl_int CL_API_CALL
  type clEnqueueReleaseD3D11ObjectsKHR_t (line 169) | typedef clEnqueueReleaseD3D11ObjectsKHR_t *
  type cl_int (line 239) | typedef cl_int CL_API_CALL
  type clGetSupportedD3D11TextureFormatsINTEL_t (line 249) | typedef clGetSupportedD3D11TextureFormatsINTEL_t *

FILE: svm/OpenCL/include/CL/cl_dx9_media_sharing.h
  type cl_uint (line 73) | typedef cl_uint             cl_dx9_media_adapter_type_khr;
  type cl_uint (line 74) | typedef cl_uint             cl_dx9_media_adapter_set_khr;
  type cl_dx9_surface_info_khr (line 77) | typedef struct _cl_dx9_surface_info_khr {
  type cl_int (line 116) | typedef cl_int CL_API_CALL
  type clGetDeviceIDsFromDX9MediaAdapterKHR_t (line 127) | typedef clGetDeviceIDsFromDX9MediaAdapterKHR_t *
  type cl_mem (line 130) | typedef cl_mem CL_API_CALL
  type clCreateFromDX9MediaSurfaceKHR_t (line 139) | typedef clCreateFromDX9MediaSurfaceKHR_t *
  type cl_int (line 142) | typedef cl_int CL_API_CALL
  type clEnqueueAcquireDX9MediaSurfacesKHR_t (line 151) | typedef clEnqueueAcquireDX9MediaSurfacesKHR_t *
  type cl_int (line 154) | typedef cl_int CL_API_CALL
  type clEnqueueReleaseDX9MediaSurfacesKHR_t (line 163) | typedef clEnqueueReleaseDX9MediaSurfacesKHR_t *
  type cl_uint (line 218) | typedef cl_uint             cl_dx9_device_source_intel;
  type cl_uint (line 219) | typedef cl_uint             cl_dx9_device_set_intel;
  type cl_int (line 253) | typedef cl_int CL_API_CALL
  type clGetDeviceIDsFromDX9INTEL_t (line 263) | typedef clGetDeviceIDsFromDX9INTEL_t *
  type cl_mem (line 266) | typedef cl_mem CL_API_CALL
  type clCreateFromDX9MediaSurfaceINTEL_t (line 275) | typedef clCreateFromDX9MediaSurfaceINTEL_t *
  type cl_int (line 278) | typedef cl_int CL_API_CALL
  type clEnqueueAcquireDX9ObjectsINTEL_t (line 287) | typedef clEnqueueAcquireDX9ObjectsINTEL_t *
  type cl_int (line 290) | typedef cl_int CL_API_CALL
  type clEnqueueReleaseDX9ObjectsINTEL_t (line 299) | typedef clEnqueueReleaseDX9ObjectsINTEL_t *
  type cl_int (line 355) | typedef cl_int CL_API_CALL
  type clGetSupportedDX9MediaSurfaceFormatsINTEL_t (line 365) | typedef clGetSupportedDX9MediaSurfaceFormatsINTEL_t *

FILE: svm/OpenCL/include/CL/cl_egl.h
  type cl_egl_image_properties_khr (line 73) | typedef intptr_t            cl_egl_image_properties_khr;
  type cl_mem (line 76) | typedef cl_mem CL_API_CALL
  type clCreateFromEGLImageKHR_t (line 85) | typedef clCreateFromEGLImageKHR_t *
  type cl_int (line 88) | typedef cl_int CL_API_CALL
  type clEnqueueAcquireEGLObjectsKHR_t (line 97) | typedef clEnqueueAcquireEGLObjectsKHR_t *
  type cl_int (line 100) | typedef cl_int CL_API_CALL
  type clEnqueueReleaseEGLObjectsKHR_t (line 109) | typedef clEnqueueReleaseEGLObjectsKHR_t *
  type cl_event (line 160) | typedef cl_event CL_API_CALL
  type clCreateEventFromEGLSyncKHR_t (line 167) | typedef clCreateEventFromEGLSyncKHR_t *

FILE: svm/OpenCL/include/CL/cl_ext.h
  type cl_bitfield (line 57) | typedef cl_bitfield         cl_device_command_buffer_capabilities_khr;
  type _cl_command_buffer_khr (line 58) | struct _cl_command_buffer_khr
  type cl_uint (line 59) | typedef cl_uint             cl_sync_point_khr;
  type cl_uint (line 60) | typedef cl_uint             cl_command_buffer_info_khr;
  type cl_uint (line 61) | typedef cl_uint             cl_command_buffer_state_khr;
  type cl_properties (line 62) | typedef cl_properties       cl_command_buffer_properties_khr;
  type cl_bitfield (line 63) | typedef cl_bitfield         cl_command_buffer_flags_khr;
  type cl_properties (line 64) | typedef cl_properties       cl_command_properties_khr;
  type _cl_mutable_command_khr (line 65) | struct _cl_mutable_command_khr
  type cl_command_buffer_khr (line 105) | typedef cl_command_buffer_khr CL_API_CALL
  type clCreateCommandBufferKHR_t (line 112) | typedef clCreateCommandBufferKHR_t *
  type cl_int (line 115) | typedef cl_int CL_API_CALL
  type clFinalizeCommandBufferKHR_t (line 119) | typedef clFinalizeCommandBufferKHR_t *
  type cl_int (line 122) | typedef cl_int CL_API_CALL
  type clRetainCommandBufferKHR_t (line 126) | typedef clRetainCommandBufferKHR_t *
  type cl_int (line 129) | typedef cl_int CL_API_CALL
  type clReleaseCommandBufferKHR_t (line 133) | typedef clReleaseCommandBufferKHR_t *
  type cl_int (line 136) | typedef cl_int CL_API_CALL
  type clEnqueueCommandBufferKHR_t (line 145) | typedef clEnqueueCommandBufferKHR_t *
  type cl_int (line 148) | typedef cl_int CL_API_CALL
  type clCommandBarrierWithWaitListKHR_t (line 158) | typedef clCommandBarrierWithWaitListKHR_t *
  type cl_int (line 161) | typedef cl_int CL_API_CALL
  type clCommandCopyBufferKHR_t (line 176) | typedef clCommandCopyBufferKHR_t *
  type cl_int (line 179) | typedef cl_int CL_API_CALL
  type clCommandCopyBufferRectKHR_t (line 198) | typedef clCommandCopyBufferRectKHR_t *
  type cl_int (line 201) | typedef cl_int CL_API_CALL
  type clCommandCopyBufferToImageKHR_t (line 216) | typedef clCommandCopyBufferToImageKHR_t *
  type cl_int (line 219) | typedef cl_int CL_API_CALL
  type clCommandCopyImageKHR_t (line 234) | typedef clCommandCopyImageKHR_t *
  type cl_int (line 237) | typedef cl_int CL_API_CALL
  type clCommandCopyImageToBufferKHR_t (line 252) | typedef clCommandCopyImageToBufferKHR_t *
  type cl_int (line 255) | typedef cl_int CL_API_CALL
  type clCommandFillBufferKHR_t (line 270) | typedef clCommandFillBufferKHR_t *
  type cl_int (line 273) | typedef cl_int CL_API_CALL
  type clCommandFillImageKHR_t (line 287) | typedef clCommandFillImageKHR_t *
  type cl_int (line 290) | typedef cl_int CL_API_CALL
  type clCommandNDRangeKernelKHR_t (line 305) | typedef clCommandNDRangeKernelKHR_t *
  type cl_int (line 308) | typedef cl_int CL_API_CALL
  type clGetCommandBufferInfoKHR_t (line 316) | typedef clGetCommandBufferInfoKHR_t *
  type cl_int (line 494) | typedef cl_int CL_API_CALL
  type clCommandSVMMemcpyKHR_t (line 507) | typedef clCommandSVMMemcpyKHR_t *
  type cl_int (line 510) | typedef cl_int CL_API_CALL
  type clCommandSVMMemFillKHR_t (line 524) | typedef clCommandSVMMemFillKHR_t *
  type cl_bitfield (line 568) | typedef cl_bitfield         cl_platform_command_buffer_capabilities_khr;
  type cl_command_buffer_khr (line 589) | typedef cl_command_buffer_khr CL_API_CALL
  type clRemapCommandBufferKHR_t (line 600) | typedef clRemapCommandBufferKHR_t *
  type cl_uint (line 628) | typedef cl_uint             cl_command_buffer_update_type_khr;
  type cl_bitfield (line 629) | typedef cl_bitfield         cl_mutable_dispatch_fields_khr;
  type cl_uint (line 630) | typedef cl_uint             cl_mutable_command_info_khr;
  type cl_mutable_dispatch_arg_khr (line 631) | typedef struct _cl_mutable_dispatch_arg_khr {
  type cl_mutable_dispatch_exec_info_khr (line 636) | typedef struct _cl_mutable_dispatch_exec_info_khr {
  type cl_mutable_dispatch_config_khr (line 641) | typedef struct _cl_mutable_dispatch_config_khr {
  type cl_bitfield (line 654) | typedef cl_bitfield         cl_mutable_dispatch_asserts_khr;
  type cl_int (line 699) | typedef cl_int CL_API_CALL
  type clUpdateMutableCommandsKHR_t (line 706) | typedef clUpdateMutableCommandsKHR_t *
  type cl_int (line 709) | typedef cl_int CL_API_CALL
  type clGetMutableCommandInfoKHR_t (line 717) | typedef clGetMutableCommandInfoKHR_t *
  type cl_int (line 779) | typedef cl_int CL_API_CALL
  type clSetMemObjectDestructorAPPLE_t (line 785) | typedef clSetMemObjectDestructorAPPLE_t *
  type clLogMessagesToSystemLogAPPLE_t (line 816) | typedef clLogMessagesToSystemLogAPPLE_t *
  type clLogMessagesToStdoutAPPLE_t (line 826) | typedef clLogMessagesToStdoutAPPLE_t *
  type clLogMessagesToStderrAPPLE_t (line 836) | typedef clLogMessagesToStderrAPPLE_t *
  type cl_int (line 881) | typedef cl_int CL_API_CALL
  type clIcdGetPlatformIDsKHR_t (line 887) | typedef clIcdGetPlatformIDsKHR_t *
  type cl_program (line 917) | typedef cl_program CL_API_CALL
  type clCreateProgramWithILKHR_t (line 924) | typedef clCreateProgramWithILKHR_t *
  type cl_bitfield (line 962) | typedef cl_bitfield         cl_context_memory_initialize_khr;
  type cl_bitfield (line 981) | typedef cl_bitfield         cl_device_terminate_capability_khr;
  type cl_int (line 996) | typedef cl_int CL_API_CALL
  type clTerminateContextKHR_t (line 1000) | typedef clTerminateContextKHR_t *
  type cl_properties (line 1037) | typedef cl_properties       cl_queue_properties_khr;
  type cl_command_queue (line 1040) | typedef cl_command_queue CL_API_CALL
  type clCreateCommandQueueWithPropertiesKHR_t (line 1047) | typedef clCreateCommandQueueWithPropertiesKHR_t *
  type cl_ulong (line 1137) | typedef cl_ulong            cl_device_partition_property_ext;
  type cl_int (line 1171) | typedef cl_int CL_API_CALL
  type clReleaseDeviceEXT_t (line 1175) | typedef clReleaseDeviceEXT_t *
  type cl_int (line 1178) | typedef cl_int CL_API_CALL
  type clRetainDeviceEXT_t (line 1182) | typedef clRetainDeviceEXT_t *
  type cl_int (line 1185) | typedef cl_int CL_API_CALL
  type clCreateSubDevicesEXT_t (line 1193) | typedef clCreateSubDevicesEXT_t *
  type cl_bitfield (line 1226) | typedef cl_bitfield         cl_mem_migration_flags_ext;
  type cl_int (line 1235) | typedef cl_int CL_API_CALL
  type clEnqueueMigrateMemObjectEXT_t (line 1245) | typedef clEnqueueMigrateMemObjectEXT_t *
  type cl_uint (line 1285) | typedef cl_uint             cl_image_pitch_info_qcom;
  type cl_mem_ext_host_ptr (line 1286) | typedef struct _cl_mem_ext_host_ptr {
  type cl_int (line 1309) | typedef cl_int CL_API_CALL
  type clGetDeviceImageInfoQCOM_t (line 1320) | typedef clGetDeviceImageInfoQCOM_t *
  type cl_mem_ion_host_ptr (line 1362) | typedef struct _cl_mem_ion_host_ptr {
  type cl_mem_android_native_buffer_host_ptr (line 1382) | typedef struct _cl_mem_android_native_buffer_host_ptr {
  type cl_int (line 1440) | typedef cl_int CL_API_CALL
  type clEnqueueAcquireGrallocObjectsIMG_t (line 1449) | typedef clEnqueueAcquireGrallocObjectsIMG_t *
  type cl_int (line 1452) | typedef cl_int CL_API_CALL
  type clEnqueueReleaseGrallocObjectsIMG_t (line 1461) | typedef clEnqueueReleaseGrallocObjectsIMG_t *
  type cl_uint (line 1496) | typedef cl_uint             cl_mipmap_filter_mode_img;
  type cl_int (line 1506) | typedef cl_int CL_API_CALL
  type clEnqueueGenerateMipmapIMG_t (line 1518) | typedef clEnqueueGenerateMipmapIMG_t *
  type cl_uint (line 1573) | typedef cl_uint             cl_kernel_sub_group_info;
  type cl_int (line 1582) | typedef cl_int CL_API_CALL
  type clGetKernelSubGroupInfoKHR_t (line 1593) | typedef clGetKernelSubGroupInfoKHR_t *
  type cl_uint (line 1637) | typedef cl_uint             cl_queue_priority_khr;
  type cl_uint (line 1658) | typedef cl_uint             cl_queue_throttle_khr;
  type cl_uint (line 1710) | typedef cl_uint             cl_version_khr;
  type cl_name_version_khr (line 1711) | typedef struct _cl_name_version_khr {
  type cl_device_pci_bus_info_khr (line 1758) | typedef struct _cl_device_pci_bus_info_khr {
  type cl_int (line 1779) | typedef cl_int CL_API_CALL
  type clGetKernelSuggestedLocalWorkSizeKHR_t (line 1788) | typedef clGetKernelSuggestedLocalWorkSizeKHR_t *
  type cl_bitfield (line 1814) | typedef cl_bitfield         cl_device_integer_dot_product_capabilities_khr;
  type cl_device_integer_dot_product_acceleration_properties_khr (line 1815) | typedef struct _cl_device_integer_dot_product_acceleration_properties_khr {
  type cl_uint (line 1843) | typedef cl_uint             cl_external_memory_handle_type_khr;
  type cl_int (line 1861) | typedef cl_int CL_API_CALL
  type clEnqueueAcquireExternalMemObjectsKHR_t (line 1870) | typedef clEnqueueAcquireExternalMemObjectsKHR_t *
  type cl_int (line 1873) | typedef cl_int CL_API_CALL
  type clEnqueueReleaseExternalMemObjectsKHR_t (line 1882) | typedef clEnqueueReleaseExternalMemObjectsKHR_t *
  type _cl_semaphore_khr (line 1958) | struct _cl_semaphore_khr
  type cl_uint (line 1959) | typedef cl_uint             cl_external_semaphore_handle_type_khr;
  type cl_int (line 1977) | typedef cl_int CL_API_CALL
  type clGetSemaphoreHandleForTypeKHR_t (line 1986) | typedef clGetSemaphoreHandleForTypeKHR_t *
  type cl_properties (line 2025) | typedef cl_properties       cl_semaphore_reimport_properties_khr;
  type cl_int (line 2031) | typedef cl_int CL_API_CALL
  type clReImportSemaphoreSyncFdKHR_t (line 2037) | typedef clReImportSemaphoreSyncFdKHR_t *
  type cl_properties (line 2076) | typedef cl_properties       cl_semaphore_properties_khr;
  type cl_uint (line 2077) | typedef cl_uint             cl_semaphore_info_khr;
  type cl_uint (line 2078) | typedef cl_uint             cl_semaphore_type_khr;
  type cl_ulong (line 2079) | typedef cl_ulong            cl_semaphore_payload_khr;
  type cl_semaphore_khr (line 2109) | typedef cl_semaphore_khr CL_API_CALL
  type clCreateSemaphoreWithPropertiesKHR_t (line 2115) | typedef clCreateSemaphoreWithPropertiesKHR_t *
  type cl_int (line 2118) | typedef cl_int CL_API_CALL
  type clEnqueueWaitSemaphoresKHR_t (line 2128) | typedef clEnqueueWaitSemaphoresKHR_t *
  type cl_int (line 2131) | typedef cl_int CL_API_CALL
  type clEnqueueSignalSemaphoresKHR_t (line 2141) | typedef clEnqueueSignalSemaphoresKHR_t *
  type cl_int (line 2144) | typedef cl_int CL_API_CALL
  type clGetSemaphoreInfoKHR_t (line 2152) | typedef clGetSemaphoreInfoKHR_t *
  type cl_int (line 2155) | typedef cl_int CL_API_CALL
  type clReleaseSemaphoreKHR_t (line 2159) | typedef clReleaseSemaphoreKHR_t *
  type cl_int (line 2162) | typedef cl_int CL_API_CALL
  type clRetainSemaphoreKHR_t (line 2166) | typedef clRetainSemaphoreKHR_t *
  type cl_import_properties_arm (line 2225) | typedef intptr_t            cl_import_properties_arm;
  type cl_mem (line 2239) | typedef cl_mem CL_API_CALL
  type clImportMemoryARM_t (line 2248) | typedef clImportMemoryARM_t *
  type cl_bitfield (line 2274) | typedef cl_bitfield         cl_svm_mem_flags_arm;
  type cl_uint (line 2275) | typedef cl_uint             cl_kernel_exec_info_arm;
  type cl_bitfield (line 2276) | typedef cl_bitfield         cl_device_svm_capabilities_arm;
  type clSVMAllocARM_t (line 2313) | typedef clSVMAllocARM_t *
  type clSVMFreeARM_t (line 2321) | typedef clSVMFreeARM_t *
  type cl_int (line 2324) | typedef cl_int CL_API_CALL
  type clEnqueueSVMFreeARM_t (line 2335) | typedef clEnqueueSVMFreeARM_t *
  type cl_int (line 2338) | typedef cl_int CL_API_CALL
  type clEnqueueSVMMemcpyARM_t (line 2349) | typedef clEnqueueSVMMemcpyARM_t *
  type cl_int (line 2352) | typedef cl_int CL_API_CALL
  type clEnqueueSVMMemFillARM_t (line 2363) | typedef clEnqueueSVMMemFillARM_t *
  type cl_int (line 2366) | typedef cl_int CL_API_CALL
  type clEnqueueSVMMapARM_t (line 2377) | typedef clEnqueueSVMMapARM_t *
  type cl_int (line 2380) | typedef cl_int CL_API_CALL
  type clEnqueueSVMUnmapARM_t (line 2388) | typedef clEnqueueSVMUnmapARM_t *
  type cl_int (line 2391) | typedef cl_int CL_API_CALL
  type clSetKernelArgSVMPointerARM_t (line 2397) | typedef clSetKernelArgSVMPointerARM_t *
  type cl_int (line 2400) | typedef cl_int CL_API_CALL
  type clSetKernelExecInfoARM_t (line 2407) | typedef clSetKernelExecInfoARM_t *
  type cl_bitfield (line 2535) | typedef cl_bitfield         cl_device_scheduling_controls_capabilities_arm;
  type cl_bitfield (line 2577) | typedef cl_bitfield         cl_device_controlled_termination_capabilitie...
  type cl_bitfield (line 2634) | typedef cl_bitfield         cl_device_feature_capabilities_intel;
  type _cl_accelerator_intel (line 2672) | struct _cl_accelerator_intel
  type cl_uint (line 2673) | typedef cl_uint             cl_accelerator_type_intel;
  type cl_uint (line 2674) | typedef cl_uint             cl_accelerator_info_intel;
  type cl_accelerator_intel (line 2689) | typedef cl_accelerator_intel CL_API_CALL
  type clCreateAcceleratorINTEL_t (line 2697) | typedef clCreateAcceleratorINTEL_t *
  type cl_int (line 2700) | typedef cl_int CL_API_CALL
  type clGetAcceleratorInfoINTEL_t (line 2708) | typedef clGetAcceleratorInfoINTEL_t *
  type cl_int (line 2711) | typedef cl_int CL_API_CALL
  type clRetainAcceleratorINTEL_t (line 2715) | typedef clRetainAcceleratorINTEL_t *
  type cl_int (line 2718) | typedef cl_int CL_API_CALL
  type clReleaseAcceleratorINTEL_t (line 2722) | typedef clReleaseAcceleratorINTEL_t *
  type cl_motion_estimation_desc_intel (line 2763) | typedef struct _cl_motion_estimation_desc_intel {
  type cl_bitfield (line 2923) | typedef cl_bitfield         cl_diagnostic_verbose_level_intel;
  type cl_bitfield (line 3125) | typedef cl_bitfield         cl_device_unified_shared_memory_capabilities...
  type cl_properties (line 3126) | typedef cl_properties       cl_mem_properties_intel;
  type cl_bitfield (line 3127) | typedef cl_bitfield         cl_mem_alloc_flags_intel;
  type cl_uint (line 3128) | typedef cl_uint             cl_mem_info_intel;
  type cl_uint (line 3129) | typedef cl_uint             cl_unified_shared_memory_type_intel;
  type cl_uint (line 3130) | typedef cl_uint             cl_mem_advice_intel;
  type clHostMemAllocINTEL_t (line 3186) | typedef clHostMemAllocINTEL_t *
  type clDeviceMemAllocINTEL_t (line 3198) | typedef clDeviceMemAllocINTEL_t *
  type clSharedMemAllocINTEL_t (line 3210) | typedef clSharedMemAllocINTEL_t *
  type cl_int (line 3213) | typedef cl_int CL_API_CALL
  type clMemFreeINTEL_t (line 3218) | typedef clMemFreeINTEL_t *
  type cl_int (line 3221) | typedef cl_int CL_API_CALL
  type clMemBlockingFreeINTEL_t (line 3226) | typedef clMemBlockingFreeINTEL_t *
  type cl_int (line 3229) | typedef cl_int CL_API_CALL
  type clGetMemAllocInfoINTEL_t (line 3238) | typedef clGetMemAllocInfoINTEL_t *
  type cl_int (line 3241) | typedef cl_int CL_API_CALL
  type clSetKernelArgMemPointerINTEL_t (line 3247) | typedef clSetKernelArgMemPointerINTEL_t *
  type cl_int (line 3250) | typedef cl_int CL_API_CALL
  type clEnqueueMemFillINTEL_t (line 3261) | typedef clEnqueueMemFillINTEL_t *
  type cl_int (line 3264) | typedef cl_int CL_API_CALL
  type clEnqueueMemcpyINTEL_t (line 3275) | typedef clEnqueueMemcpyINTEL_t *
  type cl_int (line 3278) | typedef cl_int CL_API_CALL
  type clEnqueueMemAdviseINTEL_t (line 3288) | typedef clEnqueueMemAdviseINTEL_t *
  type cl_int (line 3381) | typedef cl_int CL_API_CALL
  type clEnqueueMigrateMemINTEL_t (line 3391) | typedef clEnqueueMigrateMemINTEL_t *
  type cl_int (line 3412) | typedef cl_int CL_API_CALL
  type clEnqueueMemsetINTEL_t (line 3422) | typedef clEnqueueMemsetINTEL_t *
  type cl_mem (line 3468) | typedef cl_mem CL_API_CALL
  type clCreateBufferWithPropertiesINTEL_t (line 3477) | typedef clCreateBufferWithPropertiesINTEL_t *
  type cl_int (line 3512) | typedef cl_int CL_API_CALL
  type clEnqueueReadHostPipeINTEL_t (line 3524) | typedef clEnqueueReadHostPipeINTEL_t *
  type cl_int (line 3527) | typedef cl_int CL_API_CALL
  type clEnqueueWriteHostPipeINTEL_t (line 3539) | typedef clEnqueueWriteHostPipeINTEL_t *
  type cl_bitfield (line 3606) | typedef cl_bitfield         cl_command_queue_capabilities_intel;
  type cl_queue_family_properties_intel (line 3610) | typedef struct _cl_queue_family_properties_intel {
  type cl_uint (line 3679) | typedef cl_uint             cl_image_requirements_info_ext;
  type cl_int (line 3692) | typedef cl_int CL_API_CALL
  type clGetImageRequirementsInfoEXT_t (line 3704) | typedef clGetImageRequirementsInfoEXT_t *
  type cl_uint (line 3752) | typedef cl_uint             cl_icdl_info;
  type cl_int (line 3761) | typedef cl_int CL_API_CALL
  type clGetICDLoaderInfoOCLICD_t (line 3768) | typedef clGetICDLoaderInfoOCLICD_t *
  type cl_bitfield (line 3808) | typedef cl_bitfield         cl_device_fp_atomic_capabilities_ext;
  type cl_int (line 3848) | typedef cl_int CL_API_CALL
  type clSetContentSizeBufferPoCL_t (line 3853) | typedef clSetContentSizeBufferPoCL_t *
  type cl_bitfield (line 4002) | typedef cl_bitfield         cl_device_kernel_clock_capabilities_khr;
  type cl_int (line 4206) | typedef cl_int CL_API_CALL
  type clCancelCommandsIMG_t (line 4211) | typedef clCancelCommandsIMG_t *

FILE: svm/OpenCL/include/CL/cl_function_types.h
  type cl_int (line 24) | typedef cl_int CL_API_CALL clGetPlatformIDs_t(
  type clGetPlatformIDs_t (line 29) | typedef clGetPlatformIDs_t *
  type cl_int (line 32) | typedef cl_int CL_API_CALL clGetPlatformInfo_t(
  type clGetPlatformInfo_t (line 39) | typedef clGetPlatformInfo_t *
  type cl_int (line 42) | typedef cl_int CL_API_CALL clGetDeviceIDs_t(
  type clGetDeviceIDs_t (line 49) | typedef clGetDeviceIDs_t *
  type cl_int (line 52) | typedef cl_int CL_API_CALL clGetDeviceInfo_t(
  type clGetDeviceInfo_t (line 59) | typedef clGetDeviceInfo_t *
  type cl_context (line 62) | typedef cl_context CL_API_CALL clCreateContext_t(
  type clCreateContext_t (line 70) | typedef clCreateContext_t *
  type cl_context (line 73) | typedef cl_context CL_API_CALL clCreateContextFromType_t(
  type clCreateContextFromType_t (line 80) | typedef clCreateContextFromType_t *
  type cl_int (line 83) | typedef cl_int CL_API_CALL clRetainContext_t(
  type clRetainContext_t (line 86) | typedef clRetainContext_t *
  type cl_int (line 89) | typedef cl_int CL_API_CALL clReleaseContext_t(
  type clReleaseContext_t (line 92) | typedef clReleaseContext_t *
  type cl_int (line 95) | typedef cl_int CL_API_CALL clGetContextInfo_t(
  type clGetContextInfo_t (line 102) | typedef clGetContextInfo_t *
  type cl_int (line 105) | typedef cl_int CL_API_CALL clRetainCommandQueue_t(
  type clRetainCommandQueue_t (line 108) | typedef clRetainCommandQueue_t *
  type cl_int (line 111) | typedef cl_int CL_API_CALL clReleaseCommandQueue_t(
  type clReleaseCommandQueue_t (line 114) | typedef clReleaseCommandQueue_t *
  type cl_int (line 117) | typedef cl_int CL_API_CALL clGetCommandQueueInfo_t(
  type clGetCommandQueueInfo_t (line 124) | typedef clGetCommandQueueInfo_t *
  type cl_mem (line 127) | typedef cl_mem CL_API_CALL clCreateBuffer_t(
  type clCreateBuffer_t (line 134) | typedef clCreateBuffer_t *
  type cl_int (line 137) | typedef cl_int CL_API_CALL clRetainMemObject_t(
  type clRetainMemObject_t (line 140) | typedef clRetainMemObject_t *
  type cl_int (line 143) | typedef cl_int CL_API_CALL clReleaseMemObject_t(
  type clReleaseMemObject_t (line 146) | typedef clReleaseMemObject_t *
  type cl_int (line 149) | typedef cl_int CL_API_CALL clGetSupportedImageFormats_t(
  type clGetSupportedImageFormats_t (line 157) | typedef clGetSupportedImageFormats_t *
  type cl_int (line 160) | typedef cl_int CL_API_CALL clGetMemObjectInfo_t(
  type clGetMemObjectInfo_t (line 167) | typedef clGetMemObjectInfo_t *
  type cl_int (line 170) | typedef cl_int CL_API_CALL clGetImageInfo_t(
  type clGetImageInfo_t (line 177) | typedef clGetImageInfo_t *
  type cl_int (line 180) | typedef cl_int CL_API_CALL clRetainSampler_t(
  type clRetainSampler_t (line 183) | typedef clRetainSampler_t *
  type cl_int (line 186) | typedef cl_int CL_API_CALL clReleaseSampler_t(
  type clReleaseSampler_t (line 189) | typedef clReleaseSampler_t *
  type cl_int (line 192) | typedef cl_int CL_API_CALL clGetSamplerInfo_t(
  type clGetSamplerInfo_t (line 199) | typedef clGetSamplerInfo_t *
  type cl_program (line 202) | typedef cl_program CL_API_CALL clCreateProgramWithSource_t(
  type clCreateProgramWithSource_t (line 209) | typedef clCreateProgramWithSource_t *
  type cl_program (line 212) | typedef cl_program CL_API_CALL clCreateProgramWithBinary_t(
  type clCreateProgramWithBinary_t (line 221) | typedef clCreateProgramWithBinary_t *
  type cl_int (line 224) | typedef cl_int CL_API_CALL clRetainProgram_t(
  type clRetainProgram_t (line 227) | typedef clRetainProgram_t *
  type cl_int (line 230) | typedef cl_int CL_API_CALL clReleaseProgram_t(
  type clReleaseProgram_t (line 233) | typedef clReleaseProgram_t *
  type cl_int (line 236) | typedef cl_int CL_API_CALL clBuildProgram_t(
  type clBuildProgram_t (line 244) | typedef clBuildProgram_t *
  type cl_int (line 247) | typedef cl_int CL_API_CALL clGetProgramInfo_t(
  type clGetProgramInfo_t (line 254) | typedef clGetProgramInfo_t *
  type cl_int (line 257) | typedef cl_int CL_API_CALL clGetProgramBuildInfo_t(
  type clGetProgramBuildInfo_t (line 265) | typedef clGetProgramBuildInfo_t *
  type cl_kernel (line 268) | typedef cl_kernel CL_API_CALL clCreateKernel_t(
  type clCreateKernel_t (line 273) | typedef clCreateKernel_t *
  type cl_int (line 276) | typedef cl_int CL_API_CALL clCreateKernelsInProgram_t(
  type clCreateKernelsInProgram_t (line 282) | typedef clCreateKernelsInProgram_t *
  type cl_int (line 285) | typedef cl_int CL_API_CALL clRetainKernel_t(
  type clRetainKernel_t (line 288) | typedef clRetainKernel_t *
  type cl_int (line 291) | typedef cl_int CL_API_CALL clReleaseKernel_t(
  type clReleaseKernel_t (line 294) | typedef clReleaseKernel_t *
  type cl_int (line 297) | typedef cl_int CL_API_CALL clSetKernelArg_t(
  type clSetKernelArg_t (line 303) | typedef clSetKernelArg_t *
  type cl_int (line 306) | typedef cl_int CL_API_CALL clGetKernelInfo_t(
  type clGetKernelInfo_t (line 313) | typedef clGetKernelInfo_t *
  type cl_int (line 316) | typedef cl_int CL_API_CALL clGetKernelWorkGroupInfo_t(
  type clGetKernelWorkGroupInfo_t (line 324) | typedef clGetKernelWorkGroupInfo_t *
  type cl_int (line 327) | typedef cl_int CL_API_CALL clWaitForEvents_t(
  type clWaitForEvents_t (line 331) | typedef clWaitForEvents_t *
  type cl_int (line 334) | typedef cl_int CL_API_CALL clGetEventInfo_t(
  type clGetEventInfo_t (line 341) | typedef clGetEventInfo_t *
  type cl_int (line 344) | typedef cl_int CL_API_CALL clRetainEvent_t(
  type clRetainEvent_t (line 347) | typedef clRetainEvent_t *
  type cl_int (line 350) | typedef cl_int CL_API_CALL clReleaseEvent_t(
  type clReleaseEvent_t (line 353) | typedef clReleaseEvent_t *
  type cl_int (line 356) | typedef cl_int CL_API_CALL clGetEventProfilingInfo_t(
  type clGetEventProfilingInfo_t (line 363) | typedef clGetEventProfilingInfo_t *
  type cl_int (line 366) | typedef cl_int CL_API_CALL clFlush_t(
  type clFlush_t (line 369) | typedef clFlush_t *
  type cl_int (line 372) | typedef cl_int CL_API_CALL clFinish_t(
  type clFinish_t (line 375) | typedef clFinish_t *
  type cl_int (line 378) | typedef cl_int CL_API_CALL clEnqueueReadBuffer_t(
  type clEnqueueReadBuffer_t (line 389) | typedef clEnqueueReadBuffer_t *
  type cl_int (line 392) | typedef cl_int CL_API_CALL clEnqueueWriteBuffer_t(
  type clEnqueueWriteBuffer_t (line 403) | typedef clEnqueueWriteBuffer_t *
  type cl_int (line 406) | typedef cl_int CL_API_CALL clEnqueueCopyBuffer_t(
  type clEnqueueCopyBuffer_t (line 417) | typedef clEnqueueCopyBuffer_t *
  type cl_int (line 420) | typedef cl_int CL_API_CALL clEnqueueReadImage_t(
  type clEnqueueReadImage_t (line 433) | typedef clEnqueueReadImage_t *
  type cl_int (line 436) | typedef cl_int CL_API_CALL clEnqueueWriteImage_t(
  type clEnqueueWriteImage_t (line 449) | typedef clEnqueueWriteImage_t *
  type cl_int (line 452) | typedef cl_int CL_API_CALL clEnqueueCopyImage_t(
  type clEnqueueCopyImage_t (line 463) | typedef clEnqueueCopyImage_t *
  type cl_int (line 466) | typedef cl_int CL_API_CALL clEnqueueCopyImageToBuffer_t(
  type clEnqueueCopyImageToBuffer_t (line 477) | typedef clEnqueueCopyImageToBuffer_t *
  type cl_int (line 480) | typedef cl_int CL_API_CALL clEnqueueCopyBufferToImage_t(
  type clEnqueueCopyBufferToImage_t (line 491) | typedef clEnqueueCopyBufferToImage_t *
  type clEnqueueMapBuffer_t (line 506) | typedef clEnqueueMapBuffer_t *
  type clEnqueueMapImage_t (line 523) | typedef clEnqueueMapImage_t *
  type cl_int (line 526) | typedef cl_int CL_API_CALL clEnqueueUnmapMemObject_t(
  type clEnqueueUnmapMemObject_t (line 534) | typedef clEnqueueUnmapMemObject_t *
  type cl_int (line 537) | typedef cl_int CL_API_CALL clEnqueueNDRangeKernel_t(
  type clEnqueueNDRangeKernel_t (line 548) | typedef clEnqueueNDRangeKernel_t *
  type cl_int (line 551) | typedef cl_int CL_API_CALL clEnqueueNativeKernel_t(
  type clEnqueueNativeKernel_t (line 563) | typedef clEnqueueNativeKernel_t *
  type cl_int (line 566) | typedef cl_int CL_API_CALL clSetCommandQueueProperty_t(
  type clSetCommandQueueProperty_t (line 572) | typedef clSetCommandQueueProperty_t *
  type cl_mem (line 575) | typedef cl_mem CL_API_CALL clCreateImage2D_t(
  type clCreateImage2D_t (line 585) | typedef clCreateImage2D_t *
  type cl_mem (line 588) | typedef cl_mem CL_API_CALL clCreateImage3D_t(
  type clCreateImage3D_t (line 600) | typedef clCreateImage3D_t *
  type cl_int (line 603) | typedef cl_int CL_API_CALL clEnqueueMarker_t(
  type clEnqueueMarker_t (line 607) | typedef clEnqueueMarker_t *
  type cl_int (line 610) | typedef cl_int CL_API_CALL clEnqueueWaitForEvents_t(
  type clEnqueueWaitForEvents_t (line 615) | typedef clEnqueueWaitForEvents_t *
  type cl_int (line 618) | typedef cl_int CL_API_CALL clEnqueueBarrier_t(
  type clEnqueueBarrier_t (line 621) | typedef clEnqueueBarrier_t *
  type cl_int (line 624) | typedef cl_int CL_API_CALL
  type clUnloadCompiler_t (line 627) | typedef clUnloadCompiler_t *
  type clGetExtensionFunctionAddress_t (line 633) | typedef clGetExtensionFunctionAddress_t *
  type cl_command_queue (line 636) | typedef cl_command_queue CL_API_CALL clCreateCommandQueue_t(
  type clCreateCommandQueue_t (line 642) | typedef clCreateCommandQueue_t *
  type cl_sampler (line 645) | typedef cl_sampler CL_API_CALL clCreateSampler_t(
  type clCreateSampler_t (line 652) | typedef clCreateSampler_t *
  type cl_int (line 655) | typedef cl_int CL_API_CALL clEnqueueTask_t(
  type clEnqueueTask_t (line 662) | typedef clEnqueueTask_t *
  type cl_mem (line 667) | typedef cl_mem CL_API_CALL clCreateSubBuffer_t(
  type clCreateSubBuffer_t (line 674) | typedef clCreateSubBuffer_t *
  type cl_int (line 677) | typedef cl_int CL_API_CALL clSetMemObjectDestructorCallback_t(
  type clSetMemObjectDestructorCallback_t (line 682) | typedef clSetMemObjectDestructorCallback_t *
  type cl_event (line 685) | typedef cl_event CL_API_CALL clCreateUserEvent_t(
  type clCreateUserEvent_t (line 689) | typedef clCreateUserEvent_t *
  type cl_int (line 692) | typedef cl_int CL_API_CALL clSetUserEventStatus_t(
  type clSetUserEventStatus_t (line 696) | typedef clSetUserEventStatus_t *
  type cl_int (line 699) | typedef cl_int CL_API_CALL clSetEventCallback_t(
  type clSetEventCallback_t (line 705) | typedef clSetEventCallback_t *
  type cl_int (line 708) | typedef cl_int CL_API_CALL clEnqueueReadBufferRect_t(
  type clEnqueueReadBufferRect_t (line 724) | typedef clEnqueueReadBufferRect_t *
  type cl_int (line 727) | typedef cl_int CL_API_CALL clEnqueueWriteBufferRect_t(
  type clEnqueueWriteBufferRect_t (line 743) | typedef clEnqueueWriteBufferRect_t *
  type cl_int (line 746) | typedef cl_int CL_API_CALL clEnqueueCopyBufferRect_t(
  type clEnqueueCopyBufferRect_t (line 761) | typedef clEnqueueCopyBufferRect_t *
  type cl_int (line 768) | typedef cl_int CL_API_CALL clCreateSubDevices_t(
  type clCreateSubDevices_t (line 775) | typedef clCreateSubDevices_t *
  type cl_int (line 778) | typedef cl_int CL_API_CALL clRetainDevice_t(
  type clRetainDevice_t (line 781) | typedef clRetainDevice_t *
  type cl_int (line 784) | typedef cl_int CL_API_CALL clReleaseDevice_t(
  type clReleaseDevice_t (line 787) | typedef clReleaseDevice_t *
  type cl_mem (line 790) | typedef cl_mem CL_API_CALL clCreateImage_t(
  type clCreateImage_t (line 798) | typedef clCreateImage_t *
  type cl_program (line 801) | typedef cl_program CL_API_CALL clCreateProgramWithBuiltInKernels_t(
  type clCreateProgramWithBuiltInKernels_t (line 808) | typedef clCreateProgramWithBuiltInKernels_t *
  type cl_int (line 811) | typedef cl_int CL_API_CALL clCompileProgram_t(
  type clCompileProgram_t (line 822) | typedef clCompileProgram_t *
  type cl_program (line 825) | typedef cl_program CL_API_CALL clLinkProgram_t(
  type clLinkProgram_t (line 836) | typedef clLinkProgram_t *
  type cl_int (line 839) | typedef cl_int CL_API_CALL clUnloadPlatformCompiler_t(
  type clUnloadPlatformCompiler_t (line 842) | typedef clUnloadPlatformCompiler_t *
  type cl_int (line 845) | typedef cl_int CL_API_CALL clGetKernelArgInfo_t(
  type clGetKernelArgInfo_t (line 853) | typedef clGetKernelArgInfo_t *
  type cl_int (line 856) | typedef cl_int CL_API_CALL clEnqueueFillBuffer_t(
  type clEnqueueFillBuffer_t (line 867) | typedef clEnqueueFillBuffer_t *
  type cl_int (line 870) | typedef cl_int CL_API_CALL clEnqueueFillImage_t(
  type clEnqueueFillImage_t (line 880) | typedef clEnqueueFillImage_t *
  type cl_int (line 883) | typedef cl_int CL_API_CALL clEnqueueMigrateMemObjects_t(
  type clEnqueueMigrateMemObjects_t (line 892) | typedef clEnqueueMigrateMemObjects_t *
  type cl_int (line 895) | typedef cl_int CL_API_CALL clEnqueueMarkerWithWaitList_t(
  type clEnqueueMarkerWithWaitList_t (line 901) | typedef clEnqueueMarkerWithWaitList_t *
  type cl_int (line 904) | typedef cl_int CL_API_CALL clEnqueueBarrierWithWaitList_t(
  type clEnqueueBarrierWithWaitList_t (line 910) | typedef clEnqueueBarrierWithWaitList_t *
  type clGetExtensionFunctionAddressForPlatform_t (line 917) | typedef clGetExtensionFunctionAddressForPlatform_t *
  type cl_command_queue (line 924) | typedef cl_command_queue CL_API_CALL clCreateCommandQueueWithProperties_t(
  type clCreateCommandQueueWithProperties_t (line 930) | typedef clCreateCommandQueueWithProperties_t *
  type cl_mem (line 933) | typedef cl_mem CL_API_CALL clCreatePipe_t(
  type clCreatePipe_t (line 941) | typedef clCreatePipe_t *
  type cl_int (line 944) | typedef cl_int CL_API_CALL clGetPipeInfo_t(
  type clGetPipeInfo_t (line 951) | typedef clGetPipeInfo_t *
  type clSVMAlloc_t (line 960) | typedef clSVMAlloc_t *
  type clSVMFree_t (line 967) | typedef clSVMFree_t *
  type cl_sampler (line 970) | typedef cl_sampler CL_API_CALL clCreateSamplerWithProperties_t(
  type clCreateSamplerWithProperties_t (line 975) | typedef clCreateSamplerWithProperties_t *
  type cl_int (line 978) | typedef cl_int CL_API_CALL clSetKernelArgSVMPointer_t(
  type clSetKernelArgSVMPointer_t (line 983) | typedef clSetKernelArgSVMPointer_t *
  type cl_int (line 986) | typedef cl_int CL_API_CALL clSetKernelExecInfo_t(
  type clSetKernelExecInfo_t (line 992) | typedef clSetKernelExecInfo_t *
  type cl_int (line 995) | typedef cl_int CL_API_CALL clEnqueueSVMFree_t(
  type clEnqueueSVMFree_t (line 1005) | typedef clEnqueueSVMFree_t *
  type cl_int (line 1008) | typedef cl_int CL_API_CALL clEnqueueSVMMemcpy_t(
  type clEnqueueSVMMemcpy_t (line 1018) | typedef clEnqueueSVMMemcpy_t *
  type cl_int (line 1021) | typedef cl_int CL_API_CALL clEnqueueSVMMemFill_t(
  type clEnqueueSVMMemFill_t (line 1031) | typedef clEnqueueSVMMemFill_t *
  type cl_int (line 1034) | typedef cl_int CL_API_CALL clEnqueueSVMMap_t(
  type clEnqueueSVMMap_t (line 1044) | typedef clEnqueueSVMMap_t *
  type cl_int (line 1047) | typedef cl_int CL_API_CALL clEnqueueSVMUnmap_t(
  type clEnqueueSVMUnmap_t (line 1054) | typedef clEnqueueSVMUnmap_t *
  type cl_int (line 1061) | typedef cl_int CL_API_CALL clSetDefaultDeviceCommandQueue_t(
  type clSetDefaultDeviceCommandQueue_t (line 1066) | typedef clSetDefaultDeviceCommandQueue_t *
  type cl_int (line 1069) | typedef cl_int CL_API_CALL clGetDeviceAndHostTimer_t(
  type clGetDeviceAndHostTimer_t (line 1074) | typedef clGetDeviceAndHostTimer_t *
  type cl_int (line 1077) | typedef cl_int CL_API_CALL clGetHostTimer_t(
  type clGetHostTimer_t (line 1081) | typedef clGetHostTimer_t *
  type cl_program (line 1084) | typedef cl_program CL_API_CALL clCreateProgramWithIL_t(
  type clCreateProgramWithIL_t (line 1090) | typedef clCreateProgramWithIL_t *
  type cl_kernel (line 1093) | typedef cl_kernel CL_API_CALL clCloneKernel_t(
  type clCloneKernel_t (line 1097) | typedef clCloneKernel_t *
  type cl_int (line 1100) | typedef cl_int CL_API_CALL clGetKernelSubGroupInfo_t(
  type clGetKernelSubGroupInfo_t (line 1110) | typedef clGetKernelSubGroupInfo_t *
  type cl_int (line 1113) | typedef cl_int CL_API_CALL clEnqueueSVMMigrateMem_t(
  type clEnqueueSVMMigrateMem_t (line 1123) | typedef clEnqueueSVMMigrateMem_t *
  type cl_int (line 1130) | typedef cl_int CL_API_CALL clSetProgramSpecializationConstant_t(
  type clSetProgramSpecializationConstant_t (line 1136) | typedef clSetProgramSpecializationConstant_t *
  type cl_int (line 1139) | typedef cl_int CL_API_CALL clSetProgramReleaseCallback_t(
  type clSetProgramReleaseCallback_t (line 1144) | typedef clSetProgramReleaseCallback_t *
  type cl_int (line 1151) | typedef cl_int CL_API_CALL clSetContextDestructorCallback_t(
  type clSetContextDestructorCallback_t (line 1156) | typedef clSetContextDestructorCallback_t *
  type cl_mem (line 1159) | typedef cl_mem CL_API_CALL clCreateBufferWithProperties_t(
  type clCreateBufferWithProperties_t (line 1167) | typedef clCreateBufferWithProperties_t *
  type cl_mem (line 1170) | typedef cl_mem CL_API_CALL clCreateImageWithProperties_t(
  type clCreateImageWithProperties_t (line 1179) | typedef clCreateImageWithProperties_t *

FILE: svm/OpenCL/include/CL/cl_gl.h
  type cl_GLint (line 57) | typedef int                 cl_GLint;
  type cl_GLenum (line 58) | typedef unsigned int        cl_GLenum;
  type cl_GLuint (line 59) | typedef unsigned int        cl_GLuint;
  type cl_uint (line 61) | typedef cl_uint             cl_gl_context_info;
  type cl_uint (line 77) | typedef cl_uint             cl_gl_object_type;
  type cl_uint (line 78) | typedef cl_uint             cl_gl_texture_info;
  type cl_uint (line 79) | typedef cl_uint             cl_gl_platform_info;
  type cl_int (line 101) | typedef cl_int CL_API_CALL
  type clGetGLContextInfoKHR_t (line 109) | typedef clGetGLContextInfoKHR_t *
  type cl_mem (line 112) | typedef cl_mem CL_API_CALL
  type clCreateFromGLBuffer_t (line 119) | typedef clCreateFromGLBuffer_t *
  type cl_mem (line 143) | typedef cl_mem CL_API_CALL
  type clCreateFromGLTexture_t (line 152) | typedef clCreateFromGLTexture_t *
  type cl_mem (line 171) | typedef cl_mem CL_API_CALL
  type clCreateFromGLRenderbuffer_t (line 178) | typedef clCreateFromGLRenderbuffer_t *
  type cl_int (line 181) | typedef cl_int CL_API_CALL
  type clGetGLObjectInfo_t (line 187) | typedef clGetGLObjectInfo_t *
  type cl_int (line 190) | typedef cl_int CL_API_CALL
  type clGetGLTextureInfo_t (line 198) | typedef clGetGLTextureInfo_t *
  type cl_int (line 201) | typedef cl_int CL_API_CALL
  type clEnqueueAcquireGLObjects_t (line 210) | typedef clEnqueueAcquireGLObjects_t *
  type cl_int (line 213) | typedef cl_int CL_API_CALL
  type clEnqueueReleaseGLObjects_t (line 222) | typedef clEnqueueReleaseGLObjects_t *
  type clCreateFromGLTexture2D_t (line 279) | typedef clCreateFromGLTexture2D_t *
  type cl_mem (line 282) | typedef cl_mem CL_API_CALL
  type clCreateFromGLTexture3D_t (line 291) | typedef clCreateFromGLTexture3D_t *
  type __GLsync (line 326) | struct __GLsync
  type cl_event (line 332) | typedef cl_event CL_API_CALL
  type clCreateEventFromGLsyncKHR_t (line 338) | typedef clCreateEventFromGLsyncKHR_t *
  type cl_int (line 392) | typedef cl_int CL_API_CALL
  type clGetSupportedGLTextureFormatsINTEL_t (line 401) | typedef clGetSupportedGLTextureFormatsINTEL_t *

FILE: svm/OpenCL/include/CL/cl_half.h
  type cl_half_rounding_mode (line 44) | typedef enum
  function cl_half (line 61) | static inline cl_half cl_half_handle_overflow(cl_half_rounding_mode roun...
  function cl_half (line 87) | static inline cl_half cl_half_handle_underflow(cl_half_rounding_mode rou...
  function cl_half (line 109) | static inline cl_half cl_half_from_float(cl_float f, cl_half_rounding_mo...
  function cl_half (line 235) | static inline cl_half cl_half_from_double(cl_double d, cl_half_rounding_...
  function cl_float (line 361) | static inline cl_float cl_half_to_float(cl_half h)

FILE: svm/OpenCL/include/CL/cl_icd.h
  type cl_icd_dispatch (line 38) | typedef struct _cl_icd_dispatch {

FILE: svm/OpenCL/include/CL/cl_layer.h
  type cl_uint (line 59) | typedef cl_uint             cl_layer_info;
  type cl_uint (line 60) | typedef cl_uint             cl_layer_api_version;
  type cl_int (line 70) | typedef cl_int CL_API_CALL
  type clGetLayerInfo_t (line 77) | typedef clGetLayerInfo_t *
  type cl_int (line 80) | typedef cl_int CL_API_CALL
  type clInitLayer_t (line 87) | typedef clInitLayer_t *
  type clGetLayerInfo_t (line 97) | typedef clGetLayerInfo_t *
  type clInitLayer_t (line 100) | typedef clInitLayer_t *

FILE: svm/OpenCL/include/CL/cl_platform.h
  type cl_char (line 150) | typedef signed   __int8         cl_char;
  type cl_uchar (line 151) | typedef unsigned __int8         cl_uchar;
  type cl_short (line 152) | typedef signed   __int16        cl_short;
  type cl_ushort (line 153) | typedef unsigned __int16        cl_ushort;
  type cl_int (line 154) | typedef signed   __int32        cl_int;
  type cl_uint (line 155) | typedef unsigned __int32        cl_uint;
  type cl_long (line 156) | typedef signed   __int64        cl_long;
  type cl_ulong (line 157) | typedef unsigned __int64        cl_ulong;
  type cl_half (line 159) | typedef unsigned __int16        cl_half;
  type cl_float (line 160) | typedef float                   cl_float;
  type cl_double (line 161) | typedef double                  cl_double;
  type cl_char (line 256) | typedef int8_t          cl_char;
  type cl_uchar (line 257) | typedef uint8_t         cl_uchar;
  type cl_short (line 258) | typedef int16_t         cl_short;
  type cl_ushort (line 259) | typedef uint16_t        cl_ushort;
  type cl_int (line 260) | typedef int32_t         cl_int;
  type cl_uint (line 261) | typedef uint32_t        cl_uint;
  type cl_long (line 262) | typedef int64_t         cl_long;
  type cl_ulong (line 263) | typedef uint64_t        cl_ulong;
  type cl_half (line 265) | typedef uint16_t        cl_half;
  type cl_float (line 266) | typedef float           cl_float;
  type cl_double (line 267) | typedef double          cl_double;
  type __cl_uchar16 (line 385) | typedef __vector unsigned char     __cl_uchar16;
  type __cl_char16 (line 386) | typedef __vector signed char       __cl_char16;
  type __cl_ushort8 (line 387) | typedef __vector unsigned short    __cl_ushort8;
  type __cl_short8 (line 388) | typedef __vector signed short      __cl_short8;
  type __cl_uint4 (line 389) | typedef __vector unsigned int      __cl_uint4;
  type __cl_int4 (line 390) | typedef __vector signed int        __cl_int4;
  type __vector (line 391) | typedef __vector float             __cl_float4;
  type __cl_float4 (line 408) | typedef float __cl_float4   __attribute__((vector_size(16)));
  type __m128 (line 410) | typedef __m128 __cl_float4;
  type cl_uchar (line 422) | typedef cl_uchar    __cl_uchar16    __attribute__((vector_size(16)));
  type cl_char (line 423) | typedef cl_char     __cl_char16     __attribute__((vector_size(16)));
  type cl_ushort (line 424) | typedef cl_ushort   __cl_ushort8    __attribute__((vector_size(16)));
  type cl_short (line 425) | typedef cl_short    __cl_short8     __attribute__((vector_size(16)));
  type cl_uint (line 426) | typedef cl_uint     __cl_uint4      __attribute__((vector_size(16)));
  type cl_int (line 427) | typedef cl_int      __cl_int4       __attribute__((vector_size(16)));
  type cl_ulong (line 428) | typedef cl_ulong    __cl_ulong2     __attribute__((vector_size(16)));
  type cl_long (line 429) | typedef cl_long     __cl_long2      __attribute__((vector_size(16)));
  type cl_double (line 430) | typedef cl_double   __cl_double2    __attribute__((vector_size(16)));
  type __m128i (line 432) | typedef __m128i __cl_uchar16;
  type __m128i (line 433) | typedef __m128i __cl_char16;
  type __m128i (line 434) | typedef __m128i __cl_ushort8;
  type __m128i (line 435) | typedef __m128i __cl_short8;
  type __m128i (line 436) | typedef __m128i __cl_uint4;
  type __m128i (line 437) | typedef __m128i __cl_int4;
  type __m128i (line 438) | typedef __m128i __cl_ulong2;
  type __m128i (line 439) | typedef __m128i __cl_long2;
  type __m128d (line 440) | typedef __m128d __cl_double2;
  type cl_uchar (line 456) | typedef cl_uchar    __cl_uchar8     __attribute__((vector_size(8)));
  type cl_char (line 457) | typedef cl_char     __cl_char8      __attribute__((vector_size(8)));
  type cl_ushort (line 458) | typedef cl_ushort   __cl_ushort4    __attribute__((vector_size(8)));
  type cl_short (line 459) | typedef cl_short    __cl_short4     __attribute__((vector_size(8)));
  type cl_uint (line 460) | typedef cl_uint     __cl_uint2      __attribute__((vector_size(8)));
  type cl_int (line 461) | typedef cl_int      __cl_int2       __attribute__((vector_size(8)));
  type cl_ulong (line 462) | typedef cl_ulong    __cl_ulong1     __attribute__((vector_size(8)));
  type cl_long (line 463) | typedef cl_long     __cl_long1      __attribute__((vector_size(8)));
  type cl_float (line 464) | typedef cl_float    __cl_float2     __attribute__((vector_size(8)));
  type __m64 (line 466) | typedef __m64       __cl_uchar8;
  type __m64 (line 467) | typedef __m64       __cl_char8;
  type __m64 (line 468) | typedef __m64       __cl_ushort4;
  type __m64 (line 469) | typedef __m64       __cl_short4;
  type __m64 (line 470) | typedef __m64       __cl_uint2;
  type __m64 (line 471) | typedef __m64       __cl_int2;
  type __m64 (line 472) | typedef __m64       __cl_ulong1;
  type __m64 (line 473) | typedef __m64       __cl_long1;
  type __m64 (line 474) | typedef __m64       __cl_float2;
  type cl_float (line 494) | typedef cl_float    __cl_float8     __attribute__((vector_size(32)));
  type cl_double (line 495) | typedef cl_double   __cl_double4    __attribute__((vector_size(32)));
  type __m256 (line 497) | typedef __m256      __cl_float8;
  type __m256d (line 498) | typedef __m256d     __cl_double4;
  type cl_char2 (line 553) | typedef union
  type cl_char4 (line 566) | typedef union
  type cl_char4 (line 583) | typedef  cl_char4  cl_char3;
  type cl_char8 (line 585) | typedef union
  type cl_char16 (line 604) | typedef union
  type cl_uchar2 (line 628) | typedef union
  type cl_uchar4 (line 641) | typedef union
  type cl_uchar4 (line 658) | typedef  cl_uchar4  cl_uchar3;
  type cl_uchar8 (line 660) | typedef union
  type cl_uchar16 (line 679) | typedef union
  type cl_short2 (line 703) | typedef union
  type cl_short4 (line 716) | typedef union
  type cl_short4 (line 733) | typedef  cl_short4  cl_short3;
  type cl_short8 (line 735) | typedef union
  type cl_short16 (line 754) | typedef union
  type cl_ushort2 (line 778) | typedef union
  type cl_ushort4 (line 791) | typedef union
  type cl_ushort4 (line 808) | typedef  cl_ushort4  cl_ushort3;
  type cl_ushort8 (line 810) | typedef union
  type cl_ushort16 (line 829) | typedef union
  type cl_half2 (line 853) | typedef union
  type cl_half4 (line 866) | typedef union
  type cl_half4 (line 883) | typedef  cl_half4  cl_half3;
  type cl_half8 (line 885) | typedef union
  type cl_half16 (line 904) | typedef union
  type cl_int2 (line 927) | typedef union
  type cl_int4 (line 940) | typedef union
  type cl_int4 (line 957) | typedef  cl_int4  cl_int3;
  type cl_int8 (line 959) | typedef union
  type cl_int16 (line 978) | typedef union
  type cl_uint2 (line 1002) | typedef union
  type cl_uint4 (line 1015) | typedef union
  type cl_uint4 (line 1032) | typedef  cl_uint4  cl_uint3;
  type cl_uint8 (line 1034) | typedef union
  type cl_uint16 (line 1053) | typedef union
  type cl_long2 (line 1076) | typedef union
  type cl_long4 (line 1089) | typedef union
  type cl_long4 (line 1106) | typedef  cl_long4  cl_long3;
  type cl_long8 (line 1108) | typedef union
  type cl_long16 (line 1127) | typedef union
  type cl_ulong2 (line 1151) | typedef union
  type cl_ulong4 (line 1164) | typedef union
  type cl_ulong4 (line 1181) | typedef  cl_ulong4  cl_ulong3;
  type cl_ulong8 (line 1183) | typedef union
  type cl_ulong16 (line 1202) | typedef union
  type cl_float2 (line 1227) | typedef union
  type cl_float4 (line 1240) | typedef union
  type cl_float4 (line 1257) | typedef  cl_float4  cl_float3;
  type cl_float8 (line 1259) | typedef union
  type cl_float16 (line 1278) | typedef union
  type cl_double2 (line 1302) | typedef union
  type cl_double4 (line 1315) | typedef union
  type cl_double4 (line 1332) | typedef  cl_double4  cl_double3;
  type cl_double8 (line 1334) | typedef union
  type cl_double16 (line 1353) | typedef union

FILE: svm/OpenCL/include/CL/cl_va_api_media_sharing_intel.h
  type cl_int (line 61) | typedef cl_int CL_API_CALL
  type clGetSupportedVA_APIMediaSurfaceFormatsINTEL_t (line 71) | typedef clGetSupportedVA_APIMediaSurfaceFormatsINTEL_t *
  type cl_uint (line 98) | typedef cl_uint             cl_va_api_device_source_intel;
  type cl_uint (line 99) | typedef cl_uint             cl_va_api_device_set_intel;
  type cl_int (line 128) | typedef cl_int CL_API_CALL
  type clGetDeviceIDsFromVA_APIMediaAdapterINTEL_t (line 138) | typedef clGetDeviceIDsFromVA_APIMediaAdapterINTEL_t *
  type cl_mem (line 141) | typedef cl_mem CL_API_CALL
  type clCreateFromVA_APIMediaSurfaceINTEL_t (line 149) | typedef clCreateFromVA_APIMediaSurfaceINTEL_t *
  type cl_int (line 152) | typedef cl_int CL_API_CALL
  type clEnqueueAcquireVA_APIMediaSurfacesINTEL_t (line 161) | typedef clEnqueueAcquireVA_APIMediaSurfacesINTEL_t *
  type cl_int (line 164) | typedef cl_int CL_API_CALL
  type clEnqueueReleaseVA_APIMediaSurfacesINTEL_t (line 173) | typedef clEnqueueReleaseVA_APIMediaSurfacesINTEL_t *

FILE: svm/OpenCL/include/CL/opencl.hpp
  type cl (line 575) | namespace cl {
    type compatibility (line 628) | namespace compatibility {
      class size_t (line 634) | class size_t
        method size_type (line 655) | size_type& operator[](int index)
        method size_type (line 660) | const size_type& operator[](int index) const
      type make_kernel (line 11184) | struct make_kernel
        method make_kernel (line 11190) | make_kernel(
        method make_kernel (line 11197) | make_kernel(
        method Event (line 11210) | Event operator()(
    type detail (line 690) | namespace detail {
      function cl_int (line 791) | static inline cl_int errHandler (
      function cl_int (line 801) | static inline cl_int errHandler (cl_int err, const char * errStr = n...
      function cl_int (line 1116) | inline cl_int getInfoHelper(Functor f, cl_uint name, T* param, long)
      function cl_int (line 1124) | inline cl_int getInfoHelper(Func f, cl_uint name, vector<vector<unsi...
      function cl_int (line 1151) | inline cl_int getInfoHelper(Func f, cl_uint name, vector<T>* param, ...
      function cl_int (line 1180) | inline cl_int getInfoHelper(
      function cl_int (line 1212) | inline cl_int getInfoHelper(Func f, cl_uint name, string* param, long)
      function cl_int (line 1240) | inline cl_int getInfoHelper(Func f, cl_uint name, array<size_type, N...
      type ReferenceHandler (line 1268) | struct ReferenceHandler
      function cl_int (line 1277) | inline cl_int getInfoHelper(Func f, cl_uint name, T* param, int, typ...
      type param_traits (line 1625) | struct param_traits {}
      function cl_int (line 1920) | inline cl_int
      type GetInfoFunctor0 (line 1927) | struct GetInfoFunctor0
        method cl_int (line 1930) | cl_int operator ()(
      type GetInfoFunctor1 (line 1936) | struct GetInfoFunctor1
        method cl_int (line 1939) | cl_int operator ()(
      function cl_int (line 1945) | inline cl_int
      function cl_int (line 1953) | inline cl_int
      type ReferenceHandler (line 1962) | struct ReferenceHandler
      type ReferenceHandler<cl_device_id> (line 1970) | struct ReferenceHandler<cl_device_id>
        method cl_int (line 1981) | static cl_int retain(cl_device_id device)
        method cl_int (line 1992) | static cl_int release(cl_device_id device)
        method cl_int (line 2003) | static cl_int retain(cl_device_id)
        method cl_int (line 2006) | static cl_int release(cl_device_id)
      type ReferenceHandler<cl_device_id> (line 2000) | struct ReferenceHandler<cl_device_id>
        method cl_int (line 1981) | static cl_int retain(cl_device_id device)
        method cl_int (line 1992) | static cl_int release(cl_device_id device)
        method cl_int (line 2003) | static cl_int retain(cl_device_id)
        method cl_int (line 2006) | static cl_int release(cl_device_id)
      type ReferenceHandler<cl_platform_id> (line 2012) | struct ReferenceHandler<cl_platform_id>
        method cl_int (line 2015) | static cl_int retain(cl_platform_id)
        method cl_int (line 2018) | static cl_int release(cl_platform_id)
      type ReferenceHandler<cl_context> (line 2023) | struct ReferenceHandler<cl_context>
        method cl_int (line 2025) | static cl_int retain(cl_context context)
        method cl_int (line 2027) | static cl_int release(cl_context context)
      type ReferenceHandler<cl_command_queue> (line 2032) | struct ReferenceHandler<cl_command_queue>
        method cl_int (line 2034) | static cl_int retain(cl_command_queue queue)
        method cl_int (line 2036) | static cl_int release(cl_command_queue queue)
      type ReferenceHandler<cl_mem> (line 2041) | struct ReferenceHandler<cl_mem>
        method cl_int (line 2043) | static cl_int retain(cl_mem memory)
        method cl_int (line 2045) | static cl_int release(cl_mem memory)
      type ReferenceHandler<cl_sampler> (line 2050) | struct ReferenceHandler<cl_sampler>
        method cl_int (line 2052) | static cl_int retain(cl_sampler sampler)
        method cl_int (line 2054) | static cl_int release(cl_sampler sampler)
      type ReferenceHandler<cl_program> (line 2059) | struct ReferenceHandler<cl_program>
        method cl_int (line 2061) | static cl_int retain(cl_program program)
        method cl_int (line 2063) | static cl_int release(cl_program program)
      type ReferenceHandler<cl_kernel> (line 2068) | struct ReferenceHandler<cl_kernel>
        method cl_int (line 2070) | static cl_int retain(cl_kernel kernel)
        method cl_int (line 2072) | static cl_int release(cl_kernel kernel)
      type ReferenceHandler<cl_event> (line 2077) | struct ReferenceHandler<cl_event>
        method cl_int (line 2079) | static cl_int retain(cl_event event)
        method cl_int (line 2081) | static cl_int release(cl_event event)
      type ReferenceHandler<cl_semaphore_khr> (line 2087) | struct ReferenceHandler<cl_semaphore_khr>
        method cl_int (line 2089) | static cl_int retain(cl_semaphore_khr semaphore)
        method cl_int (line 2098) | static cl_int release(cl_semaphore_khr semaphore)
      type ReferenceHandler<cl_command_buffer_khr> (line 2110) | struct ReferenceHandler<cl_command_buffer_khr>
        method cl_int (line 2112) | static cl_int retain(cl_command_buffer_khr cmdBufferKhr)
        method cl_int (line 2120) | static cl_int release(cl_command_buffer_khr cmdBufferKhr)
      type ReferenceHandler<cl_mutable_command_khr> (line 2130) | struct ReferenceHandler<cl_mutable_command_khr>
        method cl_int (line 2133) | static cl_int retain(cl_mutable_command_khr)
        method cl_int (line 2136) | static cl_int release(cl_mutable_command_khr)
      function cl_uint (line 2145) | static cl_uint getVersion(const vector<char> &versionInfo)
      function cl_uint (line 2164) | static cl_uint getPlatformVersion(cl_platform_id platform)
      function cl_uint (line 2174) | static cl_uint getDevicePlatformVersion(cl_device_id device)
      function cl_uint (line 2181) | static cl_uint getContextPlatformVersion(cl_context context)
      class Wrapper (line 2196) | class Wrapper
        method Wrapper (line 2205) | Wrapper() : object_(nullptr) { }
        method Wrapper (line 2207) | Wrapper(const cl_type &obj, bool retainObject) : object_(obj)
        method Wrapper (line 2219) | Wrapper(const Wrapper<cl_type>& rhs)
        method Wrapper (line 2225) | Wrapper(Wrapper<cl_type>&& rhs) noexcept
        method cl_type (line 2258) | const cl_type& operator ()() const { return object_; }
        method cl_type (line 2260) | cl_type& operator ()() { return object_; }
        method cl_type (line 2262) | cl_type get() const { return object_; }
        method cl_int (line 2268) | cl_int retain() const
        method cl_int (line 2278) | cl_int release() const
      class Wrapper<cl_device_id> (line 2290) | class Wrapper<cl_device_id>
        method isReferenceCountable (line 2299) | static bool isReferenceCountable(cl_device_id device)
        method Wrapper (line 2317) | Wrapper() : object_(nullptr), referenceCountable_(false)
        method Wrapper (line 2321) | Wrapper(const cl_type &obj, bool retainObject) :
        method Wrapper (line 2337) | Wrapper(const Wrapper<cl_type>& rhs)
        method Wrapper (line 2344) | Wrapper(Wrapper<cl_type>&& rhs) noexcept
        method cl_type (line 2383) | const cl_type& operator ()() const { return object_; }
        method cl_type (line 2385) | cl_type& operator ()() { return object_; }
        method cl_type (line 2387) | cl_type get() const { return object_; }
        method cl_int (line 2396) | cl_int retain() const
        method cl_int (line 2406) | cl_int release() const
      function cl_int (line 2662) | static inline cl_int buildErrHandler(
      function cl_int (line 2676) | static inline cl_int buildErrHandler(
      class SVMTraitNull (line 3965) | class SVMTraitNull
        method cl_svm_mem_flags (line 3968) | static cl_svm_mem_flags getSVMMemFlags()
      class Deleter (line 4236) | class Deleter {
        method Deleter (line 4244) | Deleter(const Alloc &alloc, size_type copies) : alloc_{ alloc }, c...
      type KernelArgumentHandler (line 6190) | struct KernelArgumentHandler
      type KernelArgumentHandler<T, typename std::enable_if<!std::is_base_of<cl::Memory, T>::value>::type> (line 6195) | struct KernelArgumentHandler<T, typename std::enable_if<!std::is_bas...
        method size_type (line 6197) | static size_type size(const T&) { return sizeof(T); }
        method T (line 6198) | static const T* ptr(const T& value) { return &value; }
      type KernelArgumentHandler<T, typename std::enable_if<std::is_base_of<cl::Memory, T>::value>::type> (line 6204) | struct KernelArgumentHandler<T, typename std::enable_if<std::is_base...
        method size_type (line 6206) | static size_type size(const T&) { return sizeof(cl_mem); }
        method cl_mem (line 6207) | static const cl_mem* ptr(const T& value) { return &(value()); }
      type KernelArgumentHandler<LocalSpaceArg, void> (line 6213) | struct KernelArgumentHandler<LocalSpaceArg, void>
        method size_type (line 6215) | static size_type size(const LocalSpaceArg& value) { return value.s...
      type KernelArgumentHandler<cl::DeviceCommandQueue, void> (line 9925) | struct KernelArgumentHandler<cl::DeviceCommandQueue, void>
        method size_type (line 9927) | static size_type size(const cl::DeviceCommandQueue&) { return size...
        method cl_command_queue (line 9928) | static const cl_command_queue* ptr(const cl::DeviceCommandQueue& v...
    type ExternalMemoryType (line 718) | enum class ExternalMemoryType : cl_external_memory_handle_type_khr
    class Memory (line 721) | class Memory
      method Memory (line 3871) | Memory() : detail::Wrapper<cl_type>() { }
      method Memory (line 3884) | explicit Memory(const cl_mem& memory, bool retainObject) :
      method Memory (line 3892) | Memory& operator = (const cl_mem& rhs)
      method cl_int (line 3900) | cl_int getInfo(cl_mem_info name, T* param) const
      method getInfo (line 3908) | typename
      method cl_int (line 3935) | cl_int setDestructorCallback(
    class Platform (line 722) | class Platform
      method makeDefault (line 2711) | static void makeDefault() {
      method makeDefaultProvided (line 2754) | static void makeDefaultProvided(const Platform &p) {
      method unitTestClearDefault (line 2766) | static void unitTestClearDefault() {
      method Platform (line 2772) | Platform() : detail::Wrapper<cl_type>()  { }
      method Platform (line 2781) | explicit Platform(const cl_platform_id &platform, bool retainObject ...
      method Platform (line 2788) | Platform& operator = (const cl_platform_id& rhs)
      method Platform (line 2794) | static Platform getDefault(
      method Platform (line 2812) | static Platform setDefault(const Platform &default_platform)
      method cl_int (line 2821) | cl_int getInfo(cl_platform_info name, T* param) const
      method getInfo (line 2829) | typename
      method cl_int (line 2846) | cl_int getDevices(
      method cl_int (line 2907) | cl_int getDevices(
      method cl_int (line 2981) | static cl_int get(
      method cl_int (line 3016) | static cl_int get(
      method Platform (line 3035) | static Platform get(
      method cl_int (line 3048) | cl_int
    class Program (line 723) | class Program
      method Program (line 6576) | Program(
      method Program (line 6615) | Program(
      method Program (line 6656) | Program(
      method Program (line 6691) | Program(
      method Program (line 6728) | Program(
      method Program (line 6783) | Program(
      method Program (line 6850) | Program(
      method Program (line 6913) | Program(
      method Program (line 6942) | Program() { }
      method Program (line 6951) | explicit Program(const cl_program& program, bool retainObject = fals...
      method Program (line 6954) | Program& operator = (const cl_program& rhs)
      method cl_int (line 6960) | cl_int build(
      method cl_int (line 6969) | cl_int build(
      method cl_int (line 6994) | cl_int build(
      method cl_int (line 7003) | cl_int build(
      method cl_int (line 7024) | cl_int build(
      method cl_int (line 7032) | cl_int build(
      method cl_int (line 7049) | cl_int compile(
      method cl_int (line 7057) | cl_int compile(
      method cl_int (line 7075) | cl_int compile(
      method cl_int (line 7085) | cl_int compile(
      method cl_int (line 7111) | cl_int compile(
      method cl_int (line 7122) | cl_int compile(
      method cl_int (line 7155) | cl_int getInfo(cl_program_info name, T* param) const
      method getInfo (line 7162) | typename
      method cl_int (line 7176) | cl_int getBuildInfo(
      method getBuildInfo (line 7185) | typename
      method getBuildInfo (line 7204) | vector<std::pair<cl::Device, typename detail::param_traits<detail::c...
      method cl_int (line 7242) | cl_int createKernels(vector<Kernel>* kernels)
      method CL_API_PREFIX__VERSION_2_2_DEPRECATED (line 7284) | CL_API_PREFIX__VERSION_2_2_DEPRECATED cl_int setReleaseCallback(
      method setSpecializationConstant (line 7302) | typename std::enable_if<!std::is_pointer<T>::value, cl_int>::type
      method cl_int (line 7318) | cl_int setSpecializationConstant(cl_uint index, size_type size, cons...
    class Device (line 724) | class Device
      method makeDefaultProvided (line 2493) | static void makeDefaultProvided(const Device &p) {
      method unitTestClearDefault (line 2505) | static void unitTestClearDefault() {
      method Device (line 2511) | Device() : detail::Wrapper<cl_type>() { }
      method Device (line 2517) | explicit Device(const cl_device_id &device, bool retainObject = fals...
      method Device (line 2524) | static Device getDefault(
      method Device (line 2542) | static Device setDefault(const Device &default_device)
      method Device (line 2553) | Device& operator = (const cl_device_id& rhs)
      method cl_int (line 2562) | cl_int getInfo(cl_device_info name, T* param) const
      method getInfo (line 2570) | typename
      method cl_ulong (line 2590) | cl_ulong getHostTimer(cl_int *error = nullptr)
      method getDeviceAndHostTimer (line 2614) | std::pair<cl_ulong, cl_ulong> getDeviceAndHostTimer(cl_int *error = ...
    class Context (line 725) | class Context
      method makeDefault (line 3205) | static void makeDefault() {
      method makeDefaultProvided (line 3243) | static void makeDefaultProvided(const Context &c) {
      type ImageRequirementsInfo (line 3248) | struct ImageRequirementsInfo {
        method ImageRequirementsInfo (line 3250) | ImageRequirementsInfo(cl_mem_flags f, const cl_mem_properties* mem...
      method cl_int (line 3264) | static cl_int getImageRequirementsInfoExtHelper(const Context &context,
      method unitTestClearDefault (line 3300) | static void unitTestClearDefault() {
      method Context (line 3309) | Context(
      method Context (line 3344) | Context(
      method Context (line 3374) | Context(
      method Context (line 3462) | static Context getDefault(cl_int * err = nullptr)
      method Context (line 3479) | static Context setDefault(const Context &default_context)
      method Context (line 3487) | Context() : detail::Wrapper<cl_type>() { }
      method Context (line 3494) | explicit Context(const cl_context& context, bool retainObject = fals...
      method Context (line 3502) | Context& operator = (const cl_context& rhs)
      method cl_int (line 3510) | cl_int getInfo(cl_context_info name, T* param) const
      method getInfo (line 3518) | typename
      method cl_int (line 3535) | cl_int getSupportedImageFormats(
      method cl_int (line 3582) | cl_int getImageRequirementsInfoExt(cl_image_requirements_info_ext name,
      method getImageRequirementsInfoExt (line 3597) | typename
      method cl_int (line 3626) | cl_int setDestructorCallback(
    class CommandQueue (line 726) | class CommandQueue
      method makeDefault (line 7557) | static void makeDefault()
      method makeDefaultProvided (line 7589) | static void makeDefaultProvided(const CommandQueue &c) {
      method initMemoryExtension (line 7596) | static void initMemoryExtension(const cl::Device& device)
      method unitTestClearDefault (line 7619) | static void unitTestClearDefault() {
      method CommandQueue (line 7629) | CommandQueue(
      method CommandQueue (line 7695) | CommandQueue(
      method CommandQueue (line 7758) | explicit CommandQueue(
      method CommandQueue (line 7825) | explicit CommandQueue(
      method CommandQueue (line 7887) | CommandQueue(
      method CommandQueue (line 7938) | CommandQueue(
      method CommandQueue (line 7985) | static CommandQueue getDefault(cl_int * err = nullptr)
      method CommandQueue (line 8006) | static CommandQueue setDefault(const CommandQueue &default_queue)
      method CommandQueue (line 8013) | CommandQueue() { }
      method CommandQueue (line 8022) | explicit CommandQueue(const cl_command_queue& commandQueue, bool ret...
      method CommandQueue (line 8025) | CommandQueue& operator = (const cl_command_queue& rhs)
      method cl_int (line 8032) | cl_int getInfo(cl_command_queue_info name, T* param) const
      method getInfo (line 8040) | typename
      method cl_int (line 8053) | cl_int enqueueReadBuffer(
      method cl_int (line 8078) | cl_int enqueueWriteBuffer(
      method cl_int (line 8103) | cl_int enqueueCopyBuffer(
      method cl_int (line 8127) | cl_int enqueueReadBufferRect(
      method cl_int (line 8166) | cl_int enqueueReadBufferRect(
      method cl_int (line 8195) | cl_int enqueueWriteBufferRect(
      method cl_int (line 8234) | cl_int enqueueWriteBufferRect(
      method cl_int (line 8263) | cl_int enqueueCopyBufferRect(
      method cl_int (line 8300) | cl_int enqueueCopyBufferRect(
      method cl_int (line 8341) | cl_int enqueueFillBuffer(
      method cl_int (line 8370) | cl_int enqueueReadImage(
      method cl_int (line 8403) | cl_int enqueueReadImage(
      method cl_int (line 8426) | cl_int enqueueWriteImage(
      method cl_int (line 8459) | cl_int enqueueWriteImage(
      method cl_int (line 8482) | cl_int enqueueCopyImage(
      method cl_int (line 8511) | cl_int enqueueCopyImage(
      method enqueueFillImage (line 8539) | typename std::enable_if<std::is_same<T, cl_float4>::value ||
      method enqueueFillImage (line 8577) | typename std::enable_if<std::is_same<T, cl_float4>::value ||
      method cl_int (line 8599) | cl_int enqueueCopyImageToBuffer(
      method cl_int (line 8628) | cl_int enqueueCopyImageToBuffer(
      method cl_int (line 8647) | cl_int enqueueCopyBufferToImage(
      method cl_int (line 8676) | cl_int enqueueCopyBufferToImage(
      method cl_int (line 8782) | cl_int enqueueMemcpySVM(
      method cl_int (line 8807) | cl_int enqueueMemcpySVM(
      method cl_int (line 8833) | cl_int enqueueMemcpySVM(
      method cl_int (line 8862) | cl_int enqueueMemFillSVM(
      method cl_int (line 8887) | cl_int enqueueMemFillSVM(
      method cl_int (line 8912) | cl_int enqueueMemFillSVM(
      method cl_int (line 8937) | cl_int enqueueMapSVM(
      method cl_int (line 8965) | cl_int enqueueMapSVM(
      method cl_int (line 8992) | cl_int enqueueMapSVM(
      method cl_int (line 9014) | cl_int enqueueUnmapMemObject(
      method cl_int (line 9042) | cl_int enqueueUnmapSVM(
      method cl_int (line 9067) | cl_int enqueueUnmapSVM(
      method cl_int (line 9092) | cl_int enqueueUnmapSVM(
      method cl_int (line 9125) | cl_int enqueueMarkerWithWaitList(
      method cl_int (line 9155) | cl_int enqueueBarrierWithWaitList(
      method cl_int (line 9178) | cl_int enqueueMigrateMemObjects(
      method cl_int (line 9219) | cl_int enqueueMigrateSVM(
      method cl_int (line 9248) | cl_int enqueueMigrateSVM(
      method cl_int (line 9264) | cl_int enqueueMigrateSVM(
      method cl_int (line 9286) | cl_int enqueueMigrateSVM(
      method cl_int (line 9301) | cl_int enqueueMigrateSVM(
      method cl_int (line 9322) | cl_int enqueueMigrateSVM(
      method cl_int (line 9333) | cl_int enqueueNDRangeKernel(
      method CL_API_PREFIX__VERSION_1_2_DEPRECATED (line 9360) | CL_API_PREFIX__VERSION_1_2_DEPRECATED cl_int enqueueTask(
      method cl_int (line 9381) | cl_int enqueueNativeKernel(
      method CL_API_PREFIX__VERSION_1_1_DEPRECATED (line 9411) | CL_API_PREFIX__VERSION_1_1_DEPRECATED
      method CL_API_PREFIX__VERSION_1_1_DEPRECATED (line 9427) | CL_API_PREFIX__VERSION_1_1_DEPRECATED
      method cl_int (line 9439) | cl_int enqueueAcquireGLObjects(
      method cl_int (line 9461) | cl_int enqueueReleaseGLObjects(
      method cl_int (line 9493) | cl_int enqueueAcquireD3D10Objects(
      method cl_int (line 9526) | cl_int enqueueReleaseD3D10Objects(
      method CL_API_PREFIX__VERSION_1_1_DEPRECATED (line 9564) | CL_API_PREFIX__VERSION_1_1_DEPRECATED
      method cl_int (line 9573) | cl_int flush() const
      method cl_int (line 9578) | cl_int finish() const
      method cl_int (line 9584) | cl_int enqueueAcquireExternalMemObjects(
      method cl_int (line 9613) | cl_int enqueueReleaseExternalMemObjects(
    class DeviceCommandQueue (line 727) | class DeviceCommandQueue
      method DeviceCommandQueue (line 9689) | DeviceCommandQueue() { }
      method DeviceCommandQueue (line 9694) | DeviceCommandQueue(DeviceQueueProperties properties, cl_int* err = n...
      method DeviceCommandQueue (line 9717) | DeviceCommandQueue(
      method DeviceCommandQueue (line 9741) | DeviceCommandQueue(
      method DeviceCommandQueue (line 9771) | explicit DeviceCommandQueue(const cl_command_queue& commandQueue, bo...
      method DeviceCommandQueue (line 9774) | DeviceCommandQueue& operator = (const cl_command_queue& rhs)
      method cl_int (line 9781) | cl_int getInfo(cl_command_queue_info name, T* param) const
      method getInfo (line 9789) | typename
      method DeviceCommandQueue (line 9808) | static DeviceCommandQueue makeDefault(
      method DeviceCommandQueue (line 9838) | static DeviceCommandQueue makeDefault(
      method DeviceCommandQueue (line 9866) | static DeviceCommandQueue makeDefault(
      method DeviceCommandQueue (line 9898) | static DeviceCommandQueue updateDefault(const Context &context, cons...
      method DeviceCommandQueue (line 9913) | static DeviceCommandQueue getDefault(const CommandQueue &queue, cl_i...
    class Memory (line 728) | class Memory
      method Memory (line 3871) | Memory() : detail::Wrapper<cl_type>() { }
      method Memory (line 3884) | explicit Memory(const cl_mem& memory, bool retainObject) :
      method Memory (line 3892) | Memory& operator = (const cl_mem& rhs)
      method cl_int (line 3900) | cl_int getInfo(cl_mem_info name, T* param) const
      method getInfo (line 3908) | typename
      method cl_int (line 3935) | cl_int setDestructorCallback(
    class Buffer (line 729) | class Buffer
      method Buffer (line 4354) | Buffer(
      method Buffer (line 4381) | Buffer(
      method Buffer (line 4416) | Buffer(
      method Buffer (line 4435) | Buffer(
      method Buffer (line 4449) | Buffer(
      method Buffer (line 4512) | Buffer() : Memory() { }
      method Buffer (line 4521) | explicit Buffer(const cl_mem& buffer, bool retainObject = false) :
      method Buffer (line 4528) | Buffer& operator = (const cl_mem& rhs)
      method Buffer (line 4540) | Buffer createSubBuffer(
    class Pipe (line 730) | class Pipe
      method Pipe (line 5889) | Pipe(
      method Pipe (line 5914) | Pipe(
      method Pipe (line 5933) | Pipe() : Memory() { }
      method Pipe (line 5942) | explicit Pipe(const cl_mem& pipe, bool retainObject = false) :
      method Pipe (line 5949) | Pipe& operator = (const cl_mem& rhs)
      method cl_int (line 5959) | cl_int getInfo(cl_pipe_info name, T* param) const
      method getInfo (line 5967) | typename
    class Semaphore (line 732) | class Semaphore
      method Semaphore (line 11242) | Semaphore() : detail::Wrapper<cl_type>() {}
      method Semaphore (line 11243) | Semaphore(
      method Semaphore (line 11267) | Semaphore(
      method Semaphore (line 11271) | explicit Semaphore(const cl_semaphore_khr& semaphore, bool retainObj...
      method Semaphore (line 11273) | Semaphore& operator = (const cl_semaphore_khr& rhs) {
      method cl_int (line 11278) | cl_int getInfo(cl_semaphore_info_khr name, T* param) const
      method getInfo (line 11289) | typename
      method cl_int (line 11304) | cl_int getHandleForTypeKHR(
      method getHandleForTypeKHR (line 11318) | typename
      method cl_int (line 11332) | cl_int retain()
      method cl_int (line 11341) | cl_int release()
      method initExtensions (line 11353) | static void initExtensions(const Context& context)
    class CommandBufferKhr (line 735) | class CommandBufferKhr
      method CommandBufferKhr (line 11464) | CommandBufferKhr() : detail::Wrapper<cl_type>() { }
      method CommandBufferKhr (line 11466) | explicit CommandBufferKhr(const vector<CommandQueue> &queues,
      method CommandBufferKhr (line 11495) | explicit CommandBufferKhr(const cl_command_buffer_khr& commandBuffer...
      method CommandBufferKhr (line 11498) | CommandBufferKhr& operator=(const cl_command_buffer_khr& rhs)
      method cl_int (line 11505) | cl_int getInfo(cl_command_buffer_info_khr name, T* param) const
      method getInfo (line 11516) | typename
      method cl_int (line 11529) | cl_int finalizeCommandBuffer() const
      method cl_int (line 11534) | cl_int enqueueCommandBuffer(vector<CommandQueue> &queues,
      method cl_int (line 11555) | cl_int commandBarrierWithWaitList(const vector<cl_sync_point_khr>* s...
      method cl_int (line 11584) | cl_int commandCopyBuffer(const Buffer& src,
      method cl_int (line 11623) | cl_int commandCopyBufferRect(const Buffer& src,
      method cl_int (line 11670) | cl_int commandCopyBufferToImage(const Buffer& src,
      method cl_int (line 11709) | cl_int commandCopyImage(const Image& src,
      method cl_int (line 11748) | cl_int commandCopyImageToBuffer(const Image& src,
      method cl_int (line 11788) | cl_int commandFillBuffer(const Buffer& buffer,
      method cl_int (line 11826) | cl_int commandFillImage(const Image& image,
    class MutableCommandKhr (line 736) | class MutableCommandKhr
      method MutableCommandKhr (line 12017) | MutableCommandKhr() : detail::Wrapper<cl_type>() { }
      method MutableCommandKhr (line 12019) | explicit MutableCommandKhr(const cl_mutable_command_khr& mutableComm...
      method MutableCommandKhr (line 12022) | MutableCommandKhr& operator=(const cl_mutable_command_khr& rhs)
      method cl_int (line 12029) | cl_int getInfo(cl_mutable_command_info_khr name, T* param) const
      method getInfo (line 12040) | typename
    class Error (line 744) | class Error : public std::exception
      method Error (line 759) | Error(cl_int err, const char * errStr = nullptr) : err_(err), errStr...
      method cl_int (line 780) | cl_int err(void) const { return err_; }
    type detail (line 788) | namespace detail
      function cl_int (line 791) | static inline cl_int errHandler (
      function cl_int (line 801) | static inline cl_int errHandler (cl_int err, const char * errStr = n...
      function cl_int (line 1116) | inline cl_int getInfoHelper(Functor f, cl_uint name, T* param, long)
      function cl_int (line 1124) | inline cl_int getInfoHelper(Func f, cl_uint name, vector<vector<unsi...
      function cl_int (line 1151) | inline cl_int getInfoHelper(Func f, cl_uint name, vector<T>* param, ...
      function cl_int (line 1180) | inline cl_int getInfoHelper(
      function cl_int (line 1212) | inline cl_int getInfoHelper(Func f, cl_uint name, string* param, long)
      function cl_int (line 1240) | inline cl_int getInfoHelper(Func f, cl_uint name, array<size_type, N...
      type ReferenceHandler (line 1268) | struct ReferenceHandler
      function cl_int (line 1277) | inline cl_int getInfoHelper(Func f, cl_uint name, T* param, int, typ...
      type param_traits (line 1625) | struct param_traits {}
      function cl_int (line 1920) | inline cl_int
      type GetInfoFunctor0 (line 1927) | struct GetInfoFunctor0
        method cl_int (line 1930) | cl_int operator ()(
      type GetInfoFunctor1 (line 1936) | struct GetInfoFunctor1
        method cl_int (line 1939) | cl_int operator ()(
      function cl_int (line 1945) | inline cl_int
      function cl_int (line 1953) | inline cl_int
      type ReferenceHandler (line 1962) | struct ReferenceHandler
      type ReferenceHandler<cl_device_id> (line 1970) | struct ReferenceHandler<cl_device_id>
        method cl_int (line 1981) | static cl_int retain(cl_device_id device)
        method cl_int (line 1992) | static cl_int release(cl_device_id device)
        method cl_int (line 2003) | static cl_int retain(cl_device_id)
        method cl_int (line 2006) | static cl_int release(cl_device_id)
      type ReferenceHandler<cl_device_id> (line 2000) | struct ReferenceHandler<cl_device_id>
        method cl_int (line 1981) | static cl_int retain(cl_device_id device)
        method cl_int (line 1992) | static cl_int release(cl_device_id device)
        method cl_int (line 2003) | static cl_int retain(cl_device_id)
        method cl_int (line 2006) | static cl_int release(cl_device_id)
      type ReferenceHandler<cl_platform_id> (line 2012) | struct ReferenceHandler<cl_platform_id>
        method cl_int (line 2015) | static cl_int retain(cl_platform_id)
        method cl_int (line 2018) | static cl_int release(cl_platform_id)
      type ReferenceHandler<cl_context> (line 2023) | struct ReferenceHandler<cl_context>
        method cl_int (line 2025) | static cl_int retain(cl_context context)
        method cl_int (line 2027) | static cl_int release(cl_context context)
      type ReferenceHandler<cl_command_queue> (line 2032) | struct ReferenceHandler<cl_command_queue>
        method cl_int (line 2034) | static cl_int retain(cl_command_queue queue)
        method cl_int (line 2036) | static cl_int release(cl_command_queue queue)
      type ReferenceHandler<cl_mem> (line 2041) | struct ReferenceHandler<cl_mem>
        method cl_int (line 2043) | static cl_int retain(cl_mem memory)
        method cl_int (line 2045) | static cl_int release(cl_mem memory)
      type ReferenceHandler<cl_sampler> (line 2050) | struct ReferenceHandler<cl_sampler>
        method cl_int (line 2052) | static cl_int retain(cl_sampler sampler)
        method cl_int (line 2054) | static cl_int release(cl_sampler sampler)
      type ReferenceHandler<cl_program> (line 2059) | struct ReferenceHandler<cl_program>
        method cl_int (line 2061) | static cl_int retain(cl_program program)
        method cl_int (line 2063) | static cl_int release(cl_program program)
      type ReferenceHandler<cl_kernel> (line 2068) | struct ReferenceHandler<cl_kernel>
        method cl_int (line 2070) | static cl_int retain(cl_kernel kernel)
        method cl_int (line 2072) | static cl_int release(cl_kernel kernel)
      type ReferenceHandler<cl_event> (line 2077) | struct ReferenceHandler<cl_event>
        method cl_int (line 2079) | static cl_int retain(cl_event event)
        method cl_int (line 2081) | static cl_int release(cl_event event)
      type ReferenceHandler<cl_semaphore_khr> (line 2087) | struct ReferenceHandler<cl_semaphore_khr>
        method cl_int (line 2089) | static cl_int retain(cl_semaphore_khr semaphore)
        method cl_int (line 2098) | static cl_int release(cl_semaphore_khr semaphore)
      type ReferenceHandler<cl_command_buffer_khr> (line 2110) | struct ReferenceHandler<cl_command_buffer_khr>
        method cl_int (line 2112) | static cl_int retain(cl_command_buffer_khr cmdBufferKhr)
        method cl_int (line 2120) | static cl_int release(cl_command_buffer_khr cmdBufferKhr)
      type ReferenceHandler<cl_mutable_command_khr> (line 2130) | struct ReferenceHandler<cl_mutable_command_khr>
        method cl_int (line 2133) | static cl_int retain(cl_mutable_command_khr)
        method cl_int (line 2136) | static cl_int release(cl_mutable_command_khr)
      function cl_uint (line 2145) | static cl_uint getVersion(const vector<char> &versionInfo)
      function cl_uint (line 2164) | static cl_uint getPlatformVersion(cl_platform_id platform)
      function cl_uint (line 2174) | static cl_uint getDevicePlatformVersion(cl_device_id device)
      function cl_uint (line 2181) | static cl_uint getContextPlatformVersion(cl_context context)
      class Wrapper (line 2196) | class Wrapper
        method Wrapper (line 2205) | Wrapper() : object_(nullptr) { }
        method Wrapper (line 2207) | Wrapper(const cl_type &obj, bool retainObject) : object_(obj)
        method Wrapper (line 2219) | Wrapper(const Wrapper<cl_type>& rhs)
        method Wrapper (line 2225) | Wrapper(Wrapper<cl_type>&& rhs) noexcept
        method cl_type (line 2258) | const cl_type& operator ()() const { return object_; }
        method cl_type (line 2260) | cl_type& operator ()() { return object_; }
        method cl_type (line 2262) | cl_type get() const { return object_; }
        method cl_int (line 2268) | cl_int retain() const
        method cl_int (line 2278) | cl_int release() const
      class Wrapper<cl_device_id> (line 2290) | class Wrapper<cl_device_id>
        method isReferenceCountable (line 2299) | static bool isReferenceCountable(cl_device_id device)
        method Wrapper (line 2317) | Wrapper() : object_(nullptr), referenceCountable_(false)
        method Wrapper (line 2321) | Wrapper(const cl_type &obj, bool retainObject) :
        method Wrapper (line 2337) | Wrapper(const Wrapper<cl_type>& rhs)
        method Wrapper (line 2344) | Wrapper(Wrapper<cl_type>&& rhs) noexcept
        method cl_type (line 2383) | const cl_type& operator ()() const { return object_; }
        method cl_type (line 2385) | cl_type& operator ()() { return object_; }
        method cl_type (line 2387) | cl_type get() const { return object_; }
        method cl_int (line 2396) | cl_int retain() const
        method cl_int (line 2406) | cl_int release() const
      function cl_int (line 2662) | static inline cl_int buildErrHandler(
      function cl_int (line 2676) | static inline cl_int buildErrHandler(
      class SVMTraitNull (line 3965) | class SVMTraitNull
        method cl_svm_mem_flags (line 3968) | static cl_svm_mem_flags getSVMMemFlags()
      class Deleter (line 4236) | class Deleter {
        method Deleter (line 4244) | Deleter(const Alloc &alloc, size_type copies) : alloc_{ alloc }, c...
      type KernelArgumentHandler (line 6190) | struct KernelArgumentHandler
      type KernelArgumentHandler<T, typename std::enable_if<!std::is_base_of<cl::Memory, T>::value>::type> (line 6195) | struct KernelArgumentHandler<T, typename std::enable_if<!std::is_bas...
        method size_type (line 6197) | static size_type size(const T&) { return sizeof(T); }
        method T (line 6198) | static const T* ptr(const T& value) { return &value; }
      type KernelArgumentHandler<T, typename std::enable_if<std::is_base_of<cl::Memory, T>::value>::type> (line 6204) | struct KernelArgumentHandler<T, typename std::enable_if<std::is_base...
        method size_type (line 6206) | static size_type size(const T&) { return sizeof(cl_mem); }
        method cl_mem (line 6207) | static const cl_mem* ptr(const T& value) { return &(value()); }
      type KernelArgumentHandler<LocalSpaceArg, void> (line 6213) | struct KernelArgumentHandler<LocalSpaceArg, void>
        method size_type (line 6215) | static size_type size(const LocalSpaceArg& value) { return value.s...
      type KernelArgumentHandler<cl::DeviceCommandQueue, void> (line 9925) | struct KernelArgumentHandler<cl::DeviceCommandQueue, void>
        method size_type (line 9927) | static size_type size(const cl::DeviceCommandQueue&) { return size...
        method cl_command_queue (line 9928) | static const cl_command_queue* ptr(const cl::DeviceCommandQueue& v...
    type detail (line 1109) | namespace detail {
      function cl_int (line 791) | static inline cl_int errHandler (
      function cl_int (line 801) | static inline cl_int errHandler (cl_int err, const char * errStr = n...
      function cl_int (line 1116) | inline cl_int getInfoHelper(Functor f, cl_uint name, T* param, long)
      function cl_int (line 1124) | inline cl_int getInfoHelper(Func f, cl_uint name, vector<vector<unsi...
      function cl_int (line 1151) | inline cl_int getInfoHelper(Func f, cl_uint name, vector<T>* param, ...
      function cl_int (line 1180) | inline cl_int getInfoHelper(
      function cl_int (line 1212) | inline cl_int getInfoHelper(Func f, cl_uint name, string* param, long)
      function cl_int (line 1240) | inline cl_int getInfoHelper(Func f, cl_uint name, array<size_type, N...
      type ReferenceHandler (line 1268) | struct ReferenceHandler
      function cl_int (line 1277) | inline cl_int getInfoHelper(Func f, cl_uint name, T* param, int, typ...
      type param_traits (line 1625) | struct param_traits {}
      function cl_int (line 1920) | inline cl_int
      type GetInfoFunctor0 (line 1927) | struct GetInfoFunctor0
        method cl_int (line 1930) | cl_int operator ()(
      type GetInfoFunctor1 (line 1936) | struct GetInfoFunctor1
        method cl_int (line 1939) | cl_int operator ()(
      function cl_int (line 1945) | inline cl_int
      function cl_int (line 1953) | inline cl_int
      type ReferenceHandler (line 1962) | struct ReferenceHandler
      type ReferenceHandler<cl_device_id> (line 1970) | struct ReferenceHandler<cl_device_id>
        method cl_int (line 1981) | static cl_int retain(cl_device_id device)
        method cl_int (line 1992) | static cl_int release(cl_device_id device)
        method cl_int (line 2003) | static cl_int retain(cl_device_id)
        method cl_int (line 2006) | static cl_int release(cl_device_id)
      type ReferenceHandler<cl_device_id> (line 2000) | struct ReferenceHandler<cl_device_id>
        method cl_int (line 1981) | static cl_int retain(cl_device_id device)
        method cl_int (line 1992) | static cl_int release(cl_device_id device)
        method cl_int (line 2003) | static cl_int retain(cl_device_id)
        method cl_int (line 2006) | static cl_int release(cl_device_id)
      type ReferenceHandler<cl_platform_id> (line 2012) | struct ReferenceHandler<cl_platform_id>
        method cl_int (line 2015) | static cl_int retain(cl_platform_id)
        method cl_int (line 2018) | static cl_int release(cl_platform_id)
      type ReferenceHandler<cl_context> (line 2023) | struct ReferenceHandler<cl_context>
        method cl_int (line 2025) | static cl_int retain(cl_context context)
        method cl_int (line 2027) | static cl_int release(cl_context context)
      type ReferenceHandler<cl_command_queue> (line 2032) | struct ReferenceHandler<cl_command_queue>
        method cl_int (line 2034) | static cl_int retain(cl_command_queue queue)
        method cl_int (line 2036) | static cl_int release(cl_command_queue queue)
      t
Condensed preview — 315 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (3,285K chars).
[
  {
    "path": ".github/workflows/linux.yaml",
    "chars": 1040,
    "preview": "name: Build Benchmarks on Ubuntu\non: [push]\njobs:\n  BuildBenchmarks:\n    # Only Ubuntu for now.\n    runs-on: ubuntu-late"
  },
  {
    "path": ".gitignore",
    "chars": 7111,
    "preview": "## Ignore Visual Studio temporary files, build results, and\r\n## files generated by popular Visual Studio add-ons.\r\n##\r\n#"
  },
  {
    "path": "AsmGen/AsmGen.csproj",
    "chars": 1305,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\r\n\r\n  <PropertyGroup>\r\n    <OutputType>Exe</OutputType>\r\n    <TargetFramework>net8.0</T"
  },
  {
    "path": "AsmGen/AsmGen.sln",
    "chars": 1468,
    "preview": "\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.2.3"
  },
  {
    "path": "AsmGen/DataFiles/BranchhistTestBlock.c",
    "chars": 1451,
    "preview": "uint32_t testSizeCount = sizeof(branchHistoryLengths) / sizeof(int);\r\ninitializeBranchHistFuncArr();\r\nsrand(time(NULL))"
  },
  {
    "path": "AsmGen/DataFiles/CommonFunctions.c",
    "chars": 2141,
    "preview": "// this is a partial C file that's appended into generated code\r\n// stuff here is generic enough to work for both windo"
  },
  {
    "path": "AsmGen/DataFiles/GccBranchHistFunction.c",
    "chars": 2161,
    "preview": "// this is a partial C file that's appended into generated code\r\n\r\n// Run a test, return the result in time (ns) per br"
  },
  {
    "path": "AsmGen/DataFiles/GccIndirectBranchFunction.c",
    "chars": 2515,
    "preview": "// similar but for indirect branch test\r\n// needs indirectBranchTestFuncArr generated\r\n// mode:\r\n// 0 - cycle through t"
  },
  {
    "path": "AsmGen/DataFiles/IndirectBranchTestBlock.c",
    "chars": 1815,
    "preview": "// generated code will have:\r\n// - indirectBranchTargetCounts = array containing # of targets per branch\r\n// - indirect"
  },
  {
    "path": "AsmGen/DataFiles/clammicrobench.vcxproj_template",
    "chars": 7234,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/ms"
  },
  {
    "path": "AsmGen/IUarchTest.cs",
    "chars": 898,
    "preview": "using System.Text;\r\n\r\nnamespace AsmGen\r\n{\r\n    public interface IUarchTest\r\n    {\r\n        public const string ThreadLa"
  },
  {
    "path": "AsmGen/Program.cs",
    "chars": 10634,
    "preview": "using System;\r\nusing System.Collections.Generic;\r\nusing System.IO;\r\nusing System.Text;\r\nusing System.Threading.Tasks;\r\n"
  },
  {
    "path": "AsmGen/Properties/launchSettings.json",
    "chars": 121,
    "preview": "{\r\n  \"profiles\": {\r\n    \"AsmGen\": {\r\n      \"commandName\": \"Project\",\r\n      \"commandLineArgs\": \"autocopy\"\r\n    }\r\n  }\r\n}"
  },
  {
    "path": "AsmGen/README.md",
    "chars": 3367,
    "preview": "# Microbenchmark Generator\r\nC# project to generate C and assembly for CPU structure size benchmarks that use different c"
  },
  {
    "path": "AsmGen/UarchTest.cs",
    "chars": 8243,
    "preview": "using System.Runtime.Serialization;\r\nusing System.Text;\r\n\r\nnamespace AsmGen\r\n{\r\n    public abstract class UarchTest : I"
  },
  {
    "path": "AsmGen/UarchTestHelpers.cs",
    "chars": 58346,
    "preview": "using System.IO;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading.Tas"
  },
  {
    "path": "AsmGen/tests/A73RobTest.cs",
    "chars": 2253,
    "preview": "using System.Collections.Generic;\r\nusing System.Text;\r\n\r\nnamespace AsmGen\r\n{\r\n    /// <summary>\r\n    /// Looking for re"
  },
  {
    "path": "AsmGen/tests/AddLoopTest.cs",
    "chars": 2985,
    "preview": "using System.Text;\r\n\r\nnamespace AsmGen\r\n{\r\n    public class AddLoopTest : UarchTest\r\n    {\r\n        /// <summary>\r\n    "
  },
  {
    "path": "AsmGen/tests/AddNsq.cs",
    "chars": 1553,
    "preview": "using System.Text;\r\n\r\nnamespace AsmGen\r\n{\r\n    public class AddNsq : UarchTest\r\n    {\r\n        private int totalOps;\r\n "
  },
  {
    "path": "AsmGen/tests/AddSchedTest.cs",
    "chars": 3708,
    "preview": "using System.Text;\r\n\r\nnamespace AsmGen\r\n{\r\n    public class AddSchedTest : UarchTest\r\n    {\r\n        public AddSchedTes"
  },
  {
    "path": "AsmGen/tests/AddvNsq.cs",
    "chars": 1894,
    "preview": "using System.Text;\r\n\r\nnamespace AsmGen\r\n{\r\n    public class AddvNsq : UarchTest\r\n    {\r\n        private int totalOps;\r\n"
  },
  {
    "path": "AsmGen/tests/AddvSchedTest.cs",
    "chars": 1597,
    "preview": "using System.Text;\r\n\r\nnamespace AsmGen\r\n{\r\n    public class AddvSched : UarchTest\r\n    {\r\n        public AddvSched(int "
  },
  {
    "path": "AsmGen/tests/AeseSchedTest.cs",
    "chars": 2107,
    "preview": "using System.Text;\r\n\r\nnamespace AsmGen\r\n{\r\n    public class AeseSchedTest : UarchTest\r\n    {\r\n        public AeseSchedT"
  },
  {
    "path": "AsmGen/tests/AesencNsq.cs",
    "chars": 2858,
    "preview": "using System.Text;\r\n\r\nnamespace AsmGen\r\n{\r\n    public class AesencNsq : UarchTest\r\n    {\r\n        private int totalOps;"
  },
  {
    "path": "AsmGen/tests/BranchBufferTest.cs",
    "chars": 10097,
    "preview": "using System.Text;\r\n\r\nnamespace AsmGen\r\n{\r\n    public class BranchBufferTest : UarchTest\r\n    {\r\n        private bool m"
  },
  {
    "path": "AsmGen/tests/BranchHistoryTest.cs",
    "chars": 14949,
    "preview": "using System.IO;\nusing System.Text;\n\nnamespace AsmGen\n{\n    public class BranchHistoryTest : IUarchTest\n    {\n        p"
  },
  {
    "path": "AsmGen/tests/BtbTest.cs",
    "chars": 13353,
    "preview": "using System;\r\nusing System.Text;\r\n\r\nnamespace AsmGen\r\n{\r\n    public class BtbTest : UarchTest\r\n    {\r\n        private "
  },
  {
    "path": "AsmGen/tests/CvtSchedTest.cs",
    "chars": 2857,
    "preview": "using System.Text;\r\n\r\nnamespace AsmGen\r\n{\r\n    public class CvtSchedTest : UarchTest\r\n    {\r\n        public CvtSchedTes"
  },
  {
    "path": "AsmGen/tests/FAdd256RfTest.cs",
    "chars": 3771,
    "preview": "using System.Text;\r\n\r\nnamespace AsmGen\r\n{\r\n    public class Fadd256RfTest : UarchTest\r\n    {\r\n        public enum TestM"
  },
  {
    "path": "AsmGen/tests/Fadd128RfTest.cs",
    "chars": 4187,
    "preview": "using System.Collections.Generic;\r\nusing System.Text;\r\n\r\nnamespace AsmGen\r\n{\r\n    public class Fadd128RfTest : UarchTes"
  },
  {
    "path": "AsmGen/tests/Fadd128SchedTest.cs",
    "chars": 2148,
    "preview": "using System.Text;\r\n\r\nnamespace AsmGen\r\n{\r\n    public class Fadd128SchedTest : UarchTest\r\n    {\r\n        public Fadd128"
  },
  {
    "path": "AsmGen/tests/Fadd256SchedTest.cs",
    "chars": 2897,
    "preview": "using System.Text;\r\n\r\nnamespace AsmGen\r\n{\r\n    public class Fadd256SchedTest : UarchTest\r\n    {\r\n        public Fadd256"
  },
  {
    "path": "AsmGen/tests/FaddNsq.cs",
    "chars": 2807,
    "preview": "using System.Text;\r\n\r\nnamespace AsmGen\r\n{\r\n    public class FaddNsq : UarchTest\r\n    {\r\n        private int totalOps;\r\n"
  },
  {
    "path": "AsmGen/tests/FaddSchedTest.cs",
    "chars": 4238,
    "preview": "using System.Text;\r\n\r\nnamespace AsmGen\r\n{\r\n    public class FaddSchedTest : UarchTest\r\n    {\r\n        public FaddSchedT"
  },
  {
    "path": "AsmGen/tests/FcmpSchedTest.cs",
    "chars": 1329,
    "preview": "using System.Text;\r\n\r\nnamespace AsmGen\r\n{\r\n    public class FcmpSchedTest : UarchTest\r\n    {\r\n        public FcmpSchedT"
  },
  {
    "path": "AsmGen/tests/FlagRfTest.cs",
    "chars": 2296,
    "preview": "using System.Text;\n\nnamespace AsmGen\n{\n    public class FlagRfTest : UarchTest\n    {\n        private bool initialDepend"
  },
  {
    "path": "AsmGen/tests/Fma256SchedTest.cs",
    "chars": 2923,
    "preview": "using System.Text;\r\n\r\nnamespace AsmGen\r\n{\r\n    public class Fma256SchedTest : UarchTest\r\n    {\r\n        public Fma256Sc"
  },
  {
    "path": "AsmGen/tests/FmovSched.cs",
    "chars": 1600,
    "preview": "using System.Text;\r\n\r\nnamespace AsmGen\r\n{\r\n    public class FmovSched : UarchTest\r\n    {\r\n        public FmovSched(int "
  },
  {
    "path": "AsmGen/tests/FmulSchedTest.cs",
    "chars": 3327,
    "preview": "using System.Text;\r\n\r\nnamespace AsmGen\r\n{\r\n    public class FmulSchedTest : UarchTest\r\n    {\r\n        public FmulSchedT"
  },
  {
    "path": "AsmGen/tests/FpRfTest.cs",
    "chars": 5399,
    "preview": "using System.Text;\r\n\r\nnamespace AsmGen\r\n{\r\n    public class FpRfTest : UarchTest\r\n    {\r\n        private bool initialDe"
  },
  {
    "path": "AsmGen/tests/FpStoreDataNsq.cs",
    "chars": 2118,
    "preview": "using System.Text;\r\n\r\nnamespace AsmGen\r\n{\r\n    public class FpStoreDataNsqTest : UarchTest\r\n    {\r\n        public FpSto"
  },
  {
    "path": "AsmGen/tests/IdrfTest.cs",
    "chars": 2456,
    "preview": "using System.Collections.Generic;\r\nusing System.Text;\r\n\r\nnamespace AsmGen\r\n{\r\n    public class IdrfTest : UarchTest\r\n  "
  },
  {
    "path": "AsmGen/tests/IndirectBranchTest.cs",
    "chars": 22528,
    "preview": "using System.Text;\r\nusing System.IO;\r\n\r\nnamespace AsmGen\r\n{\r\n    public class IndirectBranchTest : IUarchTest\r\n    {\r\n "
  },
  {
    "path": "AsmGen/tests/IntRfDepStoreTest.cs",
    "chars": 3256,
    "preview": "using System.Text;\r\n\r\nnamespace AsmGen\r\n{\r\n    public class IntRfTestDependentStore : UarchTest\r\n    {\r\n        public "
  },
  {
    "path": "AsmGen/tests/IntRfTest.cs",
    "chars": 4286,
    "preview": "using System.Text;\r\n\r\nnamespace AsmGen\r\n{\r\n    public class IntRfTest : UarchTest\r\n    {\r\n        private bool initialD"
  },
  {
    "path": "AsmGen/tests/JsCvtNsq.cs",
    "chars": 1986,
    "preview": "using System.Text;\r\n\r\nnamespace AsmGen\r\n{\r\n    public class JsCvtNsq : UarchTest\r\n    {\r\n        private int totalOps;\r"
  },
  {
    "path": "AsmGen/tests/JsCvtSched.cs",
    "chars": 1675,
    "preview": "using System.Text;\r\n\r\nnamespace AsmGen\r\n{\r\n    public class JsCvtSched : UarchTest\r\n    {\r\n        public JsCvtSched(in"
  },
  {
    "path": "AsmGen/tests/JumpNsqTest.cs",
    "chars": 1648,
    "preview": "using System.Text;\r\n\r\nnamespace AsmGen\r\n{\r\n    public class JumpNsqTest : UarchTest\r\n    {\r\n        public JumpNsqTest("
  },
  {
    "path": "AsmGen/tests/JumpSchedTest.cs",
    "chars": 2398,
    "preview": "using System.Text;\r\n\r\nnamespace AsmGen\r\n{\r\n    public class JumpSchedTest : UarchTest\r\n    {\r\n        public JumpSchedT"
  },
  {
    "path": "AsmGen/tests/LdqTest.cs",
    "chars": 4292,
    "preview": "using System.Text;\r\n\r\nnamespace AsmGen\r\n{\r\n    public class LdqTest : UarchTest\r\n    {\r\n        bool initialDependentBr"
  },
  {
    "path": "AsmGen/tests/LeaSchedTest.cs",
    "chars": 1406,
    "preview": "using System.Text;\r\n\r\nnamespace AsmGen\r\n{\r\n    public class LeaSchedTest : UarchTest\r\n    {\r\n        public LeaSchedTes"
  },
  {
    "path": "AsmGen/tests/LoadNsq.cs",
    "chars": 2221,
    "preview": "using System.Text;\r\n\r\nnamespace AsmGen\r\n{\r\n    public class LoadNsq : UarchTest\r\n    {\r\n        public LoadNsq(int low,"
  },
  {
    "path": "AsmGen/tests/LoadSchedTest.cs",
    "chars": 4546,
    "preview": "using System.Text;\r\n\r\nnamespace AsmGen\r\n{\r\n    public class LoadSchedTest : UarchTest\r\n    {\r\n        public LoadSchedT"
  },
  {
    "path": "AsmGen/tests/MaddSchedTest.cs",
    "chars": 1395,
    "preview": "using System.Text;\r\n\r\nnamespace AsmGen\r\n{\r\n    public class MaddSchedTest : UarchTest\r\n    {\r\n        public MaddSchedT"
  },
  {
    "path": "AsmGen/tests/MaskRfTest.cs",
    "chars": 1340,
    "preview": "using System.Text;\r\n\r\nnamespace AsmGen\r\n{\r\n    public class MaskRfTest : UarchTest\r\n    {\r\n        public MaskRfTest(in"
  },
  {
    "path": "AsmGen/tests/MixAddJumpSched.cs",
    "chars": 3174,
    "preview": "using System.Text;\r\n\r\nnamespace AsmGen\r\n{\r\n    public class MixAddJumpSchedTest : UarchTest\r\n    {\r\n        public MixA"
  },
  {
    "path": "AsmGen/tests/MixAddvJsCvtNsq.cs",
    "chars": 1934,
    "preview": "using System.Text;\r\n\r\nnamespace AsmGen\r\n{\r\n    public class MixAddvJsCvtNsq : UarchTest\r\n    {\r\n        public MixAddvJ"
  },
  {
    "path": "AsmGen/tests/MixAddvJsCvtSched.cs",
    "chars": 1693,
    "preview": "using System.Text;\r\n\r\nnamespace AsmGen\r\n{\r\n    public class MixAddvJsCvtSched : UarchTest\r\n    {\r\n        public MixAdd"
  },
  {
    "path": "AsmGen/tests/MixBranchStoreTest.cs",
    "chars": 4249,
    "preview": "using System.Text;\r\n\r\nnamespace AsmGen\r\n{\r\n    public class MixBranchStoreTest : UarchTest\r\n    {\r\n        private bool"
  },
  {
    "path": "AsmGen/tests/MixFAdd256and32RfTest.cs",
    "chars": 2886,
    "preview": "using System.Text;\r\n\r\nnamespace AsmGen\r\n{\r\n    public class MixFAdd256and32RfTest : UarchTest\r\n    {\r\n        public Mi"
  },
  {
    "path": "AsmGen/tests/MixFpRfDepBranchTest.cs",
    "chars": 2142,
    "preview": "using System.Collections.Generic;\r\nusing System.Text;\r\n\r\nnamespace AsmGen\r\n{\r\n    public class MixFpRfDepBranchTest : U"
  },
  {
    "path": "AsmGen/tests/MixFpVecRfTest.cs",
    "chars": 2266,
    "preview": "using System.Collections.Generic;\r\nusing System.Text;\r\n\r\nnamespace AsmGen\r\n{\r\n    public class MixFpVecRfTest : UarchTe"
  },
  {
    "path": "AsmGen/tests/MixIntRfDepBranchTest.cs",
    "chars": 1864,
    "preview": "using System.Collections.Generic;\r\nusing System.Text;\r\n\r\nnamespace AsmGen\r\n{\r\n    public class MixIntRfDepBranchTest : "
  },
  {
    "path": "AsmGen/tests/MixIntVec128RfTest.cs",
    "chars": 3247,
    "preview": "using System.Text;\r\n\r\nnamespace AsmGen\r\n{\r\n    public class MixIntVec128RfTest : UarchTest\r\n    {\r\n        private bool"
  },
  {
    "path": "AsmGen/tests/MixIntrfFprfTest.cs",
    "chars": 5913,
    "preview": "using System.Collections.Generic;\r\nusing System.Text;\r\n\r\nnamespace AsmGen\r\n{\r\n    public class MixIntFpRfTest : UarchTe"
  },
  {
    "path": "AsmGen/tests/MixJumpStoreDataSched.cs",
    "chars": 1780,
    "preview": "using System.Text;\r\n\r\nnamespace AsmGen\r\n{\r\n    public class MixJumpStoreDataSched : UarchTest\r\n    {\r\n        public Mi"
  },
  {
    "path": "AsmGen/tests/MixJumpStoreSchedTest.cs",
    "chars": 1799,
    "preview": "using System.Text;\r\n\r\nnamespace AsmGen\r\n{\r\n    public class MixJumpStoreSchedTest : UarchTest\r\n    {\r\n        public Mi"
  },
  {
    "path": "AsmGen/tests/MixJumpThenAddSched.cs",
    "chars": 1840,
    "preview": "using System.Collections.Generic;\r\nusing System.Text;\r\n\r\nnamespace AsmGen\r\n{\r\n    public class MixJumpThenAddSched : Ua"
  },
  {
    "path": "AsmGen/tests/MixLdqStqTest.cs",
    "chars": 2575,
    "preview": "using System.Text;\r\n\r\nnamespace AsmGen\r\n{\r\n    public class MixLdqStqTest : UarchTest\r\n    {\r\n        private bool init"
  },
  {
    "path": "AsmGen/tests/MixLoadStoreDivSchedTest.cs",
    "chars": 2235,
    "preview": "using System.Text;\r\n\r\nnamespace AsmGen\r\n{\r\n    public class MixLoadStoreDivSchedTest : UarchTest\r\n    {\r\n        public"
  },
  {
    "path": "AsmGen/tests/MixLoadStoreSchedTest.cs",
    "chars": 3669,
    "preview": "using System.Text;\r\n\r\nnamespace AsmGen\r\n{\r\n    public class MixLoadStoreSched : UarchTest\r\n    {\r\n        public MixLoa"
  },
  {
    "path": "AsmGen/tests/MixStoreDivSchedTest.cs",
    "chars": 2914,
    "preview": "using System.Text;\r\n\r\nnamespace AsmGen\r\n{\r\n    public class MixStoreDivSchedTest : UarchTest\r\n    {\r\n        public Mix"
  },
  {
    "path": "AsmGen/tests/MixVec512Vec256BlockRfTest.cs",
    "chars": 2584,
    "preview": "using System.Collections.Generic;\r\nusing System.Text;\r\n\r\nnamespace AsmGen\r\n{\r\n    public class MixVec512Vec256BlockRfTe"
  },
  {
    "path": "AsmGen/tests/MixVec512Vec256RfTest.cs",
    "chars": 2151,
    "preview": "using System.Collections.Generic;\r\nusing System.Text;\r\n\r\nnamespace AsmGen\r\n{\r\n    public class MixVec512Vec256RfTest : "
  },
  {
    "path": "AsmGen/tests/MmxRfTest.cs",
    "chars": 1810,
    "preview": "using System.Text;\r\n\r\nnamespace AsmGen\r\n{\r\n    public class MmxRfTest : UarchTest\r\n    {\r\n        public MmxRfTest(int "
  },
  {
    "path": "AsmGen/tests/MulSchedTest.cs",
    "chars": 3717,
    "preview": "using System.Text;\r\n\r\nnamespace AsmGen\r\n{\r\n    public class MulSchedTest : UarchTest\r\n    {\r\n        public MulSchedTes"
  },
  {
    "path": "AsmGen/tests/NopLoopTest.cs",
    "chars": 2456,
    "preview": "using System.Text;\r\n\r\nnamespace AsmGen\r\n{\r\n    public class NopLoopTest : UarchTest\r\n    {\r\n        /// <summary>\r\n    "
  },
  {
    "path": "AsmGen/tests/PdepSchedTest.cs",
    "chars": 1367,
    "preview": "using System.Text;\r\n\r\nnamespace AsmGen\r\n{\r\n    public class PdepSchedTest : UarchTest\r\n    {\r\n        public PdepSchedT"
  },
  {
    "path": "AsmGen/tests/ReturnStackTest.cs",
    "chars": 9607,
    "preview": "using System;\r\nusing System.Text;\r\n\r\nnamespace AsmGen\r\n{\r\n    public class ReturnStackTest : UarchTest\r\n    {\r\n        "
  },
  {
    "path": "AsmGen/tests/RobTest.cs",
    "chars": 3064,
    "preview": "using System.Text;\r\n\r\nnamespace AsmGen\r\n{\r\n    public class RobTest : UarchTest\r\n    {\r\n        private string[] nops;\r"
  },
  {
    "path": "AsmGen/tests/RorSchedTest.cs",
    "chars": 1570,
    "preview": "using System.Text;\r\n\r\nnamespace AsmGen\r\n{\r\n    public class RorSchedTest : UarchTest\r\n    {\r\n        public RorSchedTes"
  },
  {
    "path": "AsmGen/tests/ShlSchedTest.cs",
    "chars": 1568,
    "preview": "using System.Text;\r\n\r\nnamespace AsmGen\r\n{\r\n    public class ShlSchedTest : UarchTest\r\n    {\r\n        public ShlSchedTes"
  },
  {
    "path": "AsmGen/tests/StoreDataDivNsqTest.cs",
    "chars": 2454,
    "preview": "using System.Text;\r\n\r\nnamespace AsmGen\r\n{\r\n    public class StoreDataDivNsqTest : UarchTest\r\n    {\r\n        public Stor"
  },
  {
    "path": "AsmGen/tests/StoreDataNsqTest.cs",
    "chars": 1905,
    "preview": "using System.Text;\r\n\r\nnamespace AsmGen\r\n{\r\n    public class StoreDataNsq : UarchTest\r\n    {\r\n        public StoreDataNs"
  },
  {
    "path": "AsmGen/tests/StoreDataSchedTest.cs",
    "chars": 4429,
    "preview": "using System.Text;\r\n\r\nnamespace AsmGen\r\n{\r\n    public class StoreDataSchedTest : UarchTest\r\n    {\r\n        public Store"
  },
  {
    "path": "AsmGen/tests/StoreDivNsqTest.cs",
    "chars": 2388,
    "preview": "using System.Text;\r\n\r\nnamespace AsmGen\r\n{\r\n    public class StoreDivNsqTest : UarchTest\r\n    {\r\n        public StoreDiv"
  },
  {
    "path": "AsmGen/tests/StoreDivSchedTest.cs",
    "chars": 3218,
    "preview": "using System.Text;\r\n\r\nnamespace AsmGen\r\n{\r\n    public class StoreDivSchedTest : UarchTest\r\n    {\r\n        public StoreD"
  },
  {
    "path": "AsmGen/tests/StoreNsq.cs",
    "chars": 1741,
    "preview": "using System.Text;\r\n\r\nnamespace AsmGen\r\n{\r\n    public class StoreNsq : UarchTest\r\n    {\r\n        public StoreNsq(int lo"
  },
  {
    "path": "AsmGen/tests/StoreSchedTest.cs",
    "chars": 3669,
    "preview": "using System.Text;\r\n\r\nnamespace AsmGen\r\n{\r\n    public class StoreSchedTest : UarchTest\r\n    {\r\n        public StoreSche"
  },
  {
    "path": "AsmGen/tests/Stq128Test.cs",
    "chars": 3956,
    "preview": "using System.Text;\r\n\r\nnamespace AsmGen\r\n{\r\n    public class Stq128Test : UarchTest\r\n    {\r\n        private bool initial"
  },
  {
    "path": "AsmGen/tests/Stq512Test.cs",
    "chars": 2722,
    "preview": "using System.Collections.Generic;\r\nusing System.Text;\r\n\r\nnamespace AsmGen\r\n{\r\n    public class Stq512Test : UarchTest\r\n"
  },
  {
    "path": "AsmGen/tests/StqTest.cs",
    "chars": 5812,
    "preview": "using System.Collections.Generic;\r\nusing System.Text;\r\n\r\nnamespace AsmGen\r\n{\r\n    public class StqTest : UarchTest\r\n   "
  },
  {
    "path": "AsmGen/tests/TakenBranchBufferTest.cs",
    "chars": 7523,
    "preview": "using System.Text;\r\n\r\nnamespace AsmGen\r\n{\r\n    public class TakenBranchBufferTest : UarchTest\r\n    {\r\n        private b"
  },
  {
    "path": "AsmGen/tests/TakenJumpSchedTest.cs",
    "chars": 6344,
    "preview": "using System.Text;\r\n\r\nnamespace AsmGen\r\n{\r\n    public class TakenJumpSchedTest : UarchTest\r\n    {\r\n        public Taken"
  },
  {
    "path": "AsmGen/tests/Vec512RfTest.cs",
    "chars": 1959,
    "preview": "using System.Collections.Generic;\r\nusing System.Text;\r\n\r\nnamespace AsmGen\r\n{\r\n    public class Vec512RfTest : UarchTest"
  },
  {
    "path": "AsmGen/tests/VecMulNsq.cs",
    "chars": 2872,
    "preview": "using System.Text;\r\n\r\nnamespace AsmGen\r\n{\r\n    public class VecMulNsq : UarchTest\r\n    {\r\n        private int totalOps;"
  },
  {
    "path": "AsmGen/tests/ZeroRobTest.cs",
    "chars": 2697,
    "preview": "using System.Text;\r\n\r\nnamespace AsmGen\r\n{\r\n    public class ZeroRobTest : UarchTest\r\n    {\r\n        private bool initia"
  },
  {
    "path": "CoherencyLatency/CoherencyLatency.cpp",
    "chars": 8133,
    "preview": "#include <stdio.h>\r\n#include <stdint.h>\r\n\r\n#ifndef __MINGW32__\r\n    #include <sys\\timeb.h>\r\n#else\r\n    #include <sys/tim"
  },
  {
    "path": "CoherencyLatency/CoherencyLatency.sln",
    "chars": 1450,
    "preview": "\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 16\r\nVisualStudioVersion = 16.0.3"
  },
  {
    "path": "CoherencyLatency/CoherencyLatency.vcxproj",
    "chars": 7212,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/ms"
  },
  {
    "path": "CoherencyLatency/Makefile",
    "chars": 642,
    "preview": "include ../Common/arch_detect.mk\n\nCFLAGS = -pthread -O3\n\nall: $(TARGET)\n\namd64:\n\t$(CC) $(CFLAGS) PThreadsCoherencyLatenc"
  },
  {
    "path": "CoherencyLatency/PThreadsCoherencyLatency.c",
    "chars": 10036,
    "preview": "#define _GNU_SOURCE\n\n#include <stdio.h>\n#include <string.h>\n#include <stdlib.h>\n#include <stdint.h>\n#include <sys/sysinf"
  },
  {
    "path": "CoherencyLatency/c2cparse/Program.cs",
    "chars": 2583,
    "preview": "// See https://aka.ms/new-console-template for more information\r\nusing System;\r\n\r\npublic class C2CParse\r\n{\r\n    public "
  },
  {
    "path": "CoherencyLatency/c2cparse/c2cparse.csproj",
    "chars": 249,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\r\n\r\n  <PropertyGroup>\r\n    <OutputType>Exe</OutputType>\r\n    <TargetFramework>net6.0</T"
  },
  {
    "path": "CoherencyLatency/c2cparse/c2cparse.sln",
    "chars": 1119,
    "preview": "\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.4.3"
  },
  {
    "path": "Common/arch_detect.mk",
    "chars": 606,
    "preview": "TARGET ?= amd64\n\nifeq ($(OS),Windows_NT)\n    TARGET = w64\nelse\n    UNAME_M := $(shell uname -m)\n    ifeq ($(UNAME_M),x86"
  },
  {
    "path": "Common/ci_gpumemlatency.sh",
    "chars": 1344,
    "preview": "#!/bin/sh\n\nmake_all () {\n\tmake amd64\n\tmake clean-obj\n\tLDFLAGS=\"-lm -L ocl-icd-arm64/usr/lib/aarch64-linux-gnu -lOpenCL\" "
  },
  {
    "path": "Common/ci_package.sh",
    "chars": 527,
    "preview": "#!/bin/sh\n\nPKG=\"clammarks-$(git rev-parse --short HEAD)\"\nrm -rf \"$PKG\" \"clammarks.txz\"\nmkdir -p \"$PKG\"\n\nfor TARGET in \"a"
  },
  {
    "path": "Common/perfmon.h",
    "chars": 4926,
    "preview": "// Stuff that only works on Linux. Should be #ifdef-ed out for mingw cross compilation\nuint64_t readmsr(uint32_t coreind"
  },
  {
    "path": "Common/timing.c",
    "chars": 1499,
    "preview": "#ifdef _MSC_VER\r\n#include <sys\\timeb.h>\r\n__declspec(selectany) struct timeb start, end;\r\nvoid start_timing() {\r\n    ftim"
  },
  {
    "path": "Common/timing.h",
    "chars": 591,
    "preview": "#ifndef timingincluded\r\n#define timingincluded\r\n#ifdef _MSC_VER\r\n#include <sys\\timeb.h>\r\n#else\r\n#include <sys/time.h>\r\n#"
  },
  {
    "path": "CoreClockChecker/BoostClockChecker.c",
    "chars": 2353,
    "preview": "#include <stdio.h>\n#include <time.h>\n#include <sys/time.h>\n#include <stdint.h>\n#include <stdlib.h> \n#include <string.h>\n"
  },
  {
    "path": "CoreClockChecker/BoostClockChecker_arm.s",
    "chars": 957,
    "preview": ".text\n.global clktsctest\n\n.global _clktsctest\n\n.balign 4\n\n/* x0 = iterations, return elapsed TSC in x0 */\n_clktsctest:\nc"
  },
  {
    "path": "CoreClockChecker/BoostClockChecker_x86.s",
    "chars": 1005,
    "preview": ".global clktsctest\n\n/* rcx = iterations, return elapsed TSC in rax */ \nclktsctest:\n  push %rdx\n  push %rbx\n  push %r8\n  "
  },
  {
    "path": "CoreClockChecker/CoreClockChecker.c",
    "chars": 8173,
    "preview": "#define _GNU_SOURCE\n#include <cpuid.h>\n#include <stdio.h>\n#include <time.h>\n#include <stdint.h>\n#include <stdlib.h>\n#inc"
  },
  {
    "path": "CoreClockChecker/CoreClockChecker_x86.s",
    "chars": 550,
    "preview": ".global clktest\n\n/*\n  %rdi = arg0 = iteration count\n*/\nclktest:\n  push %rbx\n  push %r8\n  push %r9\n  mov $1, %r8\n  mov $2"
  },
  {
    "path": "CoreClockChecker/Makefile",
    "chars": 609,
    "preview": "include ../Common/arch_detect.mk\n\nCFLAGS = -O3\nLDFLAGS = -lm\n\nall: $(TARGET)\n\namd64:\n\t$(CC) $(CFLAGS) -pthread CoreClock"
  },
  {
    "path": "CoreClockChecker/WinCoreClockChecker/CoreClockCheckFunctions.asm",
    "chars": 880,
    "preview": "section .text\r\nbits 64\r\n\r\nglobal clktest\r\n\r\n; rcx = iteration count\r\n; rdx = address of memory location to monitor\r\n; re"
  },
  {
    "path": "CoreClockChecker/WinCoreClockChecker/WinCoreClockChecker.cpp",
    "chars": 5859,
    "preview": "// WinCoreClockChecker.cpp : This file contains the 'main' function. Program execution begins and ends there.\r\n//\r\n\r\n#in"
  },
  {
    "path": "CoreClockChecker/WinCoreClockChecker/WinCoreClockChecker.sln",
    "chars": 1455,
    "preview": "\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.9.3"
  },
  {
    "path": "CoreClockChecker/WinCoreClockChecker/WinCoreClockChecker.vcxproj",
    "chars": 7744,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/ms"
  },
  {
    "path": "CoreClockChecker/WinCoreClockChecker/WinCoreClockChecker.vcxproj.filters",
    "chars": 1135,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbui"
  },
  {
    "path": "GpuMemLatency/Makefile",
    "chars": 1128,
    "preview": "include ../Common/arch_detect.mk\n\nOCL_VER = v2023.04.17\nCI_SCRIPT = ../Common/ci_gpumemlatency.sh\n\nCFLAGS = -O3 -I ../Co"
  },
  {
    "path": "GpuMemLatency/OpenCL/LICENSE",
    "chars": 11358,
    "preview": "\n                                 Apache License\n                           Version 2.0, January 2004\n                  "
  },
  {
    "path": "GpuMemLatency/OpenCL/README.md",
    "chars": 1560,
    "preview": "# OpenCL<sup>TM</sup> API Headers\n\nThis repository contains C language headers for the OpenCL API.\n\nThe authoritative pu"
  },
  {
    "path": "GpuMemLatency/OpenCL/include/CL/cl.h",
    "chars": 80236,
    "preview": "/*******************************************************************************\n * Copyright (c) 2008-2020 The Khronos "
  },
  {
    "path": "GpuMemLatency/OpenCL/include/CL/cl_d3d10.h",
    "chars": 4258,
    "preview": "/*******************************************************************************\n * Copyright (c) 2008-2020 The Khronos "
  },
  {
    "path": "GpuMemLatency/OpenCL/include/CL/cl_d3d11.h",
    "chars": 4252,
    "preview": "/*******************************************************************************\n * Copyright (c) 2008-2020 The Khronos "
  },
  {
    "path": "GpuMemLatency/OpenCL/include/CL/cl_dx9_media_sharing.h",
    "chars": 4479,
    "preview": "/*******************************************************************************\n * Copyright (c) 2008-2020 The Khronos "
  },
  {
    "path": "GpuMemLatency/OpenCL/include/CL/cl_dx9_media_sharing_intel.h",
    "chars": 6773,
    "preview": "/*******************************************************************************\n * Copyright (c) 2008-2020 The Khronos "
  },
  {
    "path": "GpuMemLatency/OpenCL/include/CL/cl_egl.h",
    "chars": 4486,
    "preview": "/*******************************************************************************\n * Copyright (c) 2008-2020 The Khronos "
  },
  {
    "path": "GpuMemLatency/OpenCL/include/CL/cl_ext.h",
    "chars": 34073,
    "preview": "/*******************************************************************************\n * Copyright (c) 2008-2020 The Khronos "
  },
  {
    "path": "GpuMemLatency/OpenCL/include/CL/cl_ext_intel.h",
    "chars": 27679,
    "preview": "/*******************************************************************************\n * Copyright (c) 2008-2020 The Khronos "
  },
  {
    "path": "GpuMemLatency/OpenCL/include/CL/cl_gl.h",
    "chars": 6474,
    "preview": "/*******************************************************************************\n * Copyright (c) 2008-2020 The Khronos "
  },
  {
    "path": "GpuMemLatency/OpenCL/include/CL/cl_gl_ext.h",
    "chars": 1266,
    "preview": "/*******************************************************************************\n * Copyright (c) 2008-2020 The Khronos "
  },
  {
    "path": "GpuMemLatency/OpenCL/include/CL/cl_half.h",
    "chars": 10394,
    "preview": "/*******************************************************************************\n * Copyright (c) 2019-2020 The Khronos "
  },
  {
    "path": "GpuMemLatency/OpenCL/include/CL/cl_icd.h",
    "chars": 53862,
    "preview": "/*******************************************************************************\n * Copyright (c) 2019-2020 The Khronos "
  },
  {
    "path": "GpuMemLatency/OpenCL/include/CL/cl_platform.h",
    "chars": 42095,
    "preview": "/*******************************************************************************\n * Copyright (c) 2008-2020 The Khronos "
  },
  {
    "path": "GpuMemLatency/OpenCL/include/CL/cl_va_api_media_sharing_intel.h",
    "chars": 6524,
    "preview": "/*******************************************************************************\n * Copyright (c) 2008-2020 The Khronos "
  },
  {
    "path": "GpuMemLatency/OpenCL/include/CL/cl_version.h",
    "chars": 3125,
    "preview": "/*******************************************************************************\n * Copyright (c) 2018-2020 The Khronos "
  },
  {
    "path": "GpuMemLatency/OpenCL/include/CL/opencl.h",
    "chars": 996,
    "preview": "/*******************************************************************************\n * Copyright (c) 2008-2020 The Khronos "
  },
  {
    "path": "GpuMemLatency/atomic_test.c",
    "chars": 6473,
    "preview": "#include \"opencltest.h\"\r\n\r\nfloat int_atomic_latency_test(cl_context context,\r\n    cl_command_queue command_queue,\r\n    c"
  },
  {
    "path": "GpuMemLatency/bw_test.c",
    "chars": 27069,
    "preview": "#include \"opencltest.h\"\r\n\r\nfloat bw_test(cl_context context,\r\n    cl_command_queue command_queue,\r\n    cl_kernel kernel,"
  },
  {
    "path": "GpuMemLatency/common.c",
    "chars": 12862,
    "preview": "#include \"opencltest.h\"\r\n\r\ncl_device_id selected_device_id;\r\ncl_platform_id selected_platform_id;\r\ncl_ulong max_global_t"
  },
  {
    "path": "GpuMemLatency/instruction_rate.c",
    "chars": 29544,
    "preview": "#include \"opencltest.h\"\r\n\r\nfloat fp64_instruction_rate_test(cl_context context,\r\n    cl_command_queue command_queue,\r\n  "
  },
  {
    "path": "GpuMemLatency/instruction_rate_fp16_kernel.cl",
    "chars": 2676,
    "preview": "#pragma OPENCL EXTENSION cl_khr_fp16 : enable\n#define rate_local_mem_test_size 256\r\n__kernel void fp16_add_rate_test(__g"
  },
  {
    "path": "GpuMemLatency/instruction_rate_fp64_kernel.cl",
    "chars": 2725,
    "preview": "#define rate_local_mem_test_size 256\r\n__kernel void fp64_add_rate_test(__global double2 *A, int count, __global double2 "
  },
  {
    "path": "GpuMemLatency/instruction_rate_kernel.cl",
    "chars": 33085,
    "preview": "#define rate_local_mem_test_size 512\r\n\r\n// A must be at least (local size * 4) uint32 elements in size, but must not exc"
  },
  {
    "path": "GpuMemLatency/kernel.cl",
    "chars": 18346,
    "preview": "// not used, I tried\r\n__constant sampler_t direct_sampler = CLK_NORMALIZED_COORDS_FALSE | // coordinates are from 0 to m"
  },
  {
    "path": "GpuMemLatency/kernels/atomic_exec_latency_test.cl",
    "chars": 1008,
    "preview": "__kernel void atomic_exec_latency_test(__global int* A, int count, __global int* ret) {\r\n    int current = get_global_id"
  },
  {
    "path": "GpuMemLatency/kernels/buffer_bw_test.cl",
    "chars": 1193,
    "preview": "#define fixed_tex_test_size 1024\r\n__kernel void buffer_bw_test(__read_only image1d_buffer_t A, uint count, __global floa"
  },
  {
    "path": "GpuMemLatency/kernels/c2c_atomic_exec_latency_test.cl",
    "chars": 802,
    "preview": "// hoping each thread/workgroup lands on a different CU\r\n// A = pointer to location being bounced around\r\n// count = ite"
  },
  {
    "path": "GpuMemLatency/kernels/constant_unrolled_latency_test.cl",
    "chars": 965,
    "preview": "// latency test like the unrolled one above, but with input as constant memory\r\n__kernel void constant_unrolled_latency_"
  },
  {
    "path": "GpuMemLatency/kernels/ldst_bw_test.cl",
    "chars": 3237,
    "preview": "#define ldst_bw_test_size 1024\r\n// test load/store bandwidth with a small test size that should fit in L1\r\n/*__kernel vo"
  },
  {
    "path": "GpuMemLatency/kernels/local_64_bw_test.cl",
    "chars": 1163,
    "preview": "#define local64_test_size 2048 // size was given in 4B elements. This test uses 8B\r\n__kernel void local_64_bw_test(__glo"
  },
  {
    "path": "GpuMemLatency/kernels/local_atomic_latency_test.cl",
    "chars": 1350,
    "preview": "__kernel void local_atomic_latency_test(__global int* A, int count, __global int* ret) {\r\n    __local int a[1];\r\n    int"
  },
  {
    "path": "GpuMemLatency/kernels/local_bw_test.cl",
    "chars": 1828,
    "preview": "#define local_mem_bw_test_size 1024\r\n// test bandwidth with local memory. A must be at least local_mem_bw_test_size in f"
  },
  {
    "path": "GpuMemLatency/kernels/local_float4_bw_test.cl",
    "chars": 3787,
    "preview": "#define local_mem_bw_test_size 1024\r\n__kernel void local_float4_bw_test(__global float4* A, uint count, __global float* "
  },
  {
    "path": "GpuMemLatency/kernels/local_unrolled_latency_test.cl",
    "chars": 1398,
    "preview": "#define local_mem_test_size 1024\r\n// uses local memory (LDS/shmem)\r\n__kernel void local_unrolled_latency_test(__global c"
  },
  {
    "path": "GpuMemLatency/kernels/scalar_unrolled_latency_test.cl",
    "chars": 941,
    "preview": "// Ensures the loaded value will be constant across a workgroup\r\n__kernel void scalar_unrolled_latency_test(__global con"
  },
  {
    "path": "GpuMemLatency/kernels/sum_bw_test.cl",
    "chars": 1466,
    "preview": "__kernel void sum_bw_test(__global float* A, uint count, uint float4size, __global float* ret, uint skip, __global uint "
  },
  {
    "path": "GpuMemLatency/kernels/tex_bw_test.cl",
    "chars": 1616,
    "preview": "__constant sampler_t funny_sampler = CLK_NORMALIZED_COORDS_TRUE | // coordinates are from 0 to 1 (float)\r\n              "
  },
  {
    "path": "GpuMemLatency/kernels/tex_latency_test.cl",
    "chars": 1307,
    "preview": "__kernel void tex_latency_test(__read_only image1d_buffer_t A, int count, __global int* ret, int list_size) {\r\n    int l"
  },
  {
    "path": "GpuMemLatency/kernels/unrolled_latency_test.cl",
    "chars": 1115,
    "preview": "// unrolled until terascale no longer saw further improvement (10x unroll)\r\n// assumes count will be a multiple of 10. b"
  },
  {
    "path": "GpuMemLatency/latency_test.c",
    "chars": 9720,
    "preview": "#include \"opencltest.h\"\n\n// list_size = number of 4B (32-bit) elements\nfloat latency_test(cl_context context,\n    cl_com"
  },
  {
    "path": "GpuMemLatency/local_mem_latency_kernel.cl",
    "chars": 1239,
    "preview": "// for testing total local memory capacity by seeing when threads can no longer overlap in time\r\n// due to local mem cap"
  },
  {
    "path": "GpuMemLatency/opencltest.c",
    "chars": 44994,
    "preview": "#include \"opencltest.h\"\n\n// default test sizes for latency, in KB\nint default_test_sizes[] = { 1, 2, 4, 8, 12, 16, 24, 3"
  },
  {
    "path": "GpuMemLatency/opencltest.h",
    "chars": 4009,
    "preview": "#pragma once\n\n#ifndef opencltestheader\n#define opencltestheader\n#include <stdio.h>\n#include <stdlib.h>\n#include <stdint."
  },
  {
    "path": "GpuMemLatency/opencltest.sln",
    "chars": 1438,
    "preview": "\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 16\r\nVisualStudioVersion = 16.0.3"
  },
  {
    "path": "GpuMemLatency/opencltest.vcxproj",
    "chars": 11560,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/ms"
  },
  {
    "path": "GpuMemLatency/opencltest.vcxproj.filters",
    "chars": 1932,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbui"
  },
  {
    "path": "GpuMemLatency/texturetest.c",
    "chars": 27,
    "preview": "#include \"opencltest.h\"\r\n\r\n"
  },
  {
    "path": "InstructionRate/Makefile",
    "chars": 879,
    "preview": "include ../Common/arch_detect.mk\n\nCFLAGS = -O3\n\nall: $(TARGET)\n\namd64:\n\t$(CC) $(CFLAGS) x86_instructionrate.s x86_instru"
  },
  {
    "path": "InstructionRate/arm_instructionrate.c",
    "chars": 20531,
    "preview": "#define  _GNU_SOURCE\n#include <stdio.h>\n#include <sys/time.h>\n#include <time.h>\n#include <stdint.h>\n#include <stdlib.h>\n"
  },
  {
    "path": "InstructionRate/arm_instructionrate.s",
    "chars": 56232,
    "preview": ".text\n\n.global clktest\n.global addtest\n.global eortest\n.global maddaddtest\n.global cmptest\n.global addmultest\n.global ad"
  },
  {
    "path": "InstructionRate/riscv_instructionrate.c",
    "chars": 3665,
    "preview": "#define  _GNU_SOURCE\n#include <stdio.h>\n#include <sys/time.h>\n#include <time.h>\n#include <stdint.h>\n#include <stdlib.h>\n"
  },
  {
    "path": "InstructionRate/riscv_instructionrate.s",
    "chars": 5492,
    "preview": ".text\n\n.global clktest\n.global addtest\n.global faddtest\n.global fmultest\n.global mixfaddfmultest\n.global fmatest\n.global"
  },
  {
    "path": "InstructionRate/test.s",
    "chars": 523187,
    "preview": "\nx86_instructionrate:     file format elf64-x86-64\n\n\nDisassembly of section .init:\n\n0000000000001000 <_init>:\n    1000:\t"
  },
  {
    "path": "InstructionRate/x86_fusion.c",
    "chars": 3598,
    "preview": "/* This is a one-off microbenchmark for attempts to figure out what\n * instructions are fused on Centaur's CNS\n */\n#incl"
  },
  {
    "path": "InstructionRate/x86_fusion.s",
    "chars": 2683,
    "preview": ".text\n\n.global clktest\n.global addtest\n.global noptest\n.global testfusion\n.global cmpfusion\n.global subfusion\n.global no"
  },
  {
    "path": "InstructionRate/x86_instructionrate.c",
    "chars": 38487,
    "preview": "/* This is a one-off microbenchmark for attempts to dissect\n * Zhaoxin's KX-6640MA (LuJiaZui) architecture\n */\n#include "
  },
  {
    "path": "InstructionRate/x86_instructionrate.s",
    "chars": 101687,
    "preview": ".text\n\n.global clktest\n.global clkmovtest\n.global addtest\n.global addnoptest\n.global addmovtest\n.global rortest\n.global "
  },
  {
    "path": "LICENSE",
    "chars": 11357,
    "preview": "                                 Apache License\n                           Version 2.0, January 2004\n                   "
  },
  {
    "path": "LoadedMemoryLatency/LoadedMemoryLatency/LoadedMemoryLatency.asm",
    "chars": 1174,
    "preview": "section .text\r\nbits 64\r\n\r\nglobal asm_read\r\n\r\n; rcx = ptr to array\r\n; rdx = array length in bytes\r\n; r8 = stop flag\r\n; r9"
  },
  {
    "path": "LoadedMemoryLatency/LoadedMemoryLatency/LoadedMemoryLatency.cpp",
    "chars": 17363,
    "preview": "#include <stdio.h>\r\n#include <stdlib.h>\r\n#include <stdint.h>\r\n#include <string.h>\r\n#include <math.h>\r\n#include <errno.h>"
  },
  {
    "path": "LoadedMemoryLatency/LoadedMemoryLatency/LoadedMemoryLatency.sln",
    "chars": 1455,
    "preview": "\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.11."
  },
  {
    "path": "LoadedMemoryLatency/LoadedMemoryLatency/LoadedMemoryLatency.vcxproj",
    "chars": 7655,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/m"
  },
  {
    "path": "LoadedMemoryLatency/LoadedMemoryLatency/LoadedMemoryLatency.vcxproj.filters",
    "chars": 1131,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbui"
  },
  {
    "path": "LoadedMemoryLatency/LoadedMemoryLatency.c",
    "chars": 19806,
    "preview": "#define _GNU_SOURCE\n#include <stdio.h>\n#include <stdlib.h>\n#include <stdint.h>\n#include <string.h>\n#include <unistd.h>\n#"
  },
  {
    "path": "LoadedMemoryLatency/LoadedMemoryLatency_amd64.s",
    "chars": 2007,
    "preview": ".global asm_read\n.global asm_add\n\n/* rcx = ptr to array\n   rdx = arr length in bytes\n   r8 = stop flag\n   r9 = throttle "
  },
  {
    "path": "LoadedMemoryLatency/LoadedMemoryLatency_arm.s",
    "chars": 2617,
    "preview": ".global asm_read\n.global _asm_read\n\n.global asm_add\n.global _asm_add\n\n/* x0 = ptr to array\n   x1 = arr length in bytes\n "
  },
  {
    "path": "LoadedMemoryLatency/Makefile",
    "chars": 180,
    "preview": "amd64:\n\tgcc -O3 LoadedMemoryLatency.c LoadedMemoryLatency_amd64.s -o loadedlat_amd64 -lm\naarch64:\n\tgcc -O3 LoadedMemoryL"
  },
  {
    "path": "Makefile",
    "chars": 556,
    "preview": "include Common/arch_detect.mk\n\nCOMPONENTS = CoherencyLatency MemoryLatency MemoryBandwidth InstructionRate Meshsim CoreC"
  },
  {
    "path": "MemoryBandwidth/Makefile",
    "chars": 982,
    "preview": "include ../Common/arch_detect.mk\n\nCFLAGS = -pthread -O3\nLDFLAGS= -lm\n\nall: $(TARGET)\n\namd64:\n\t$(CC) $(CFLAGS) MemoryBand"
  },
  {
    "path": "MemoryBandwidth/MemoryBandwidth/MemoryBandwidth.cpp",
    "chars": 30803,
    "preview": "// MemoryBandwidth.cpp : This file contains the 'main' function. Program execution begins and ends there.\r\n//\r\n\r\n#includ"
  },
  {
    "path": "MemoryBandwidth/MemoryBandwidth/MemoryBandwidth.sln",
    "chars": 2254,
    "preview": "\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.6.3"
  },
  {
    "path": "MemoryBandwidth/MemoryBandwidth/MemoryBandwidth.vcxproj",
    "chars": 8536,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/ms"
  },
  {
    "path": "MemoryBandwidth/MemoryBandwidth/MemoryBandwidth.vcxproj.filters",
    "chars": 1249,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbui"
  },
  {
    "path": "MemoryBandwidth/MemoryBandwidth/MemoryBandwidthFunctions.asm",
    "chars": 22481,
    "preview": "section .text\r\n\r\nbits 64\r\n\r\nglobal sse_asm_read\r\nglobal sse_asm_copy\r\nglobal sse_asm_write\r\nglobal sse_asm_ntwrite\r\nglob"
  },
  {
    "path": "MemoryBandwidth/MemoryBandwidth/MemoryBandwidthFunctions32.asm",
    "chars": 4739,
    "preview": "section .text\n\nbits 32\n\nglobal @sse_asm_read32@12\nglobal sse_asm_read32\nglobal @mmx_asm_read32@12\nglobal mmx_asm_read32\n"
  }
]

// ... and 115 more files (download for full content)

About this extraction

This page contains the full source code of the clamchowder/Microbenchmarks GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 315 files (3.0 MB), approximately 790.1k tokens, and a symbol index with 2565 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!