tree: 2dd95ff2bd0e86ad055301d1231ee614a98c22df [path history] [tgz]
  1. cpuid/
  2. bf.cpp
  3. calc.cpp
  4. calc2.cpp
  5. ccmp.cpp
  6. CMakeLists.txt
  7. cputopology.cpp
  8. echo.bf
  9. fizzbuzz.bf
  10. hello.bf
  11. jmp_table.cpp
  12. Makefile
  13. memfd.cpp
  14. memfunc.cpp
  15. no_flags.cpp
  16. profiler.cpp
  17. protect-re.cpp
  18. quantize.cpp
  19. readme.md
  20. stackframe.cpp
  21. static_buf.cpp
  22. test0.cpp
  23. test_util.cpp
  24. toyvm.cpp
  25. zero_upper.cpp
sample/readme.md

Xbyak Sample Programs

This directory contains sample programs demonstrating various features of the Xbyak JIT assembler library.

Sample Programs

  • test0.cpp (test/test64) - Basic Xbyak functionality tests
  • bf.cpp (bf/bf64) - Brainf*ck interpreter using JIT compilation
  • calc.cpp (calc/calc64) - Calculator using Boost.Spirit parser (requires Boost)
  • memfunc.cpp (memfunc/memfunc64) - Member function JIT compilation example
  • test_util.cpp (test_util/test_util64) - CPU feature detection and cache topology
  • cputopology.cpp (cputopology) - CPU cache topology API demonstration (CpuTopology, CpuCache, LogicalCpu, CpuMask)
  • jmp_table.cpp (jmp_table/jmp_table64) - Jump table demonstration
  • zero_upper.cpp (zero_upper) - AVX zero upper demonstration
  • ccmp.cpp (ccmp) - Conditional compare instructions
  • no_flags.cpp (no_flags) - Instructions without flag modifications
  • quantize.cpp (quantize) - Quantization example
  • toyvm.cpp (toyvm) - Simple toy virtual machine with JIT
  • profiler.cpp (profiler) - Performance profiling example
  • static_buf.cpp (static_buf/static_buf64) - Static buffer example (Linux only)
  • memfd.cpp (memfd) - Memory file descriptor example (Linux only)

Building with CMake (Recommended)

CMake provides cross-platform build support for Windows, Linux, and macOS.

Basic Build (64-bit targets)

mkdir build
cd build
cmake ..
cmake --build . --config Release

Clean build

#clean build
cmake --build . --target clean
#clean then build (Recommended)
cmake --build . --clean-first --config Release

Clean Fresh start (most thorough)

# Delete build directory and reconfigure
rm -rf build
mkdir build
cd build
cmake ..
cmake --build . --config Release

Running Examples

On Windows:

.\bin\Release\test_util64.exe
.\bin\Release\test64.exe
.\bin\Release\bf64.exe

On Linux/macOS:

./bin/test_util64
./bin/test64
./bin/bf64

Building Specific Targets

# Build only test_util64
cmake --build . --config Release --target test_util64

# Build only profiler
cmake --build . --config Release --target profiler

Optional 32-bit Targets (Linux only)

To build 32-bit targets on a 64-bit Linux system, you need multilib support:

# Install multilib (Ubuntu/Debian)
sudo apt-get install gcc-multilib g++-multilib

# Configure with 32-bit targets enabled
cmake -DBUILD_32BIT_TARGETS=ON ..
cmake --build . --config Release

This will build additional 32-bit versions: test, bf, toyvm, test_util, memfunc, static_buf, jmp_table, and calc (if Boost is available).

Boost Support

The calc and calc64 targets require Boost libraries. CMake will automatically detect Boost and build these targets if available.

Installing Boost:

  • Windows: Download from https://www.boost.org/ or use vcpkg
  • Linux: sudo apt-get install libboost-all-dev
  • macOS: brew install boost

CMake Options

  • BUILD_32BIT_TARGETS=ON/OFF - Enable 32-bit target builds (default: OFF, Linux 64-bit only)
  • BUILD_PROFILER_VTUNE=ON/OFF - Build profiler with VTune support (default: OFF, requires Intel VTune)
# Example with options
cmake -DBUILD_32BIT_TARGETS=ON -DBUILD_PROFILER_VTUNE=ON ..

Building with Make (Linux/macOS)

# Build all targets
make

# Build specific target
make test64
make bf64
make test_util64

# Clean
make clean

The Makefile automatically detects:

  • System architecture (32-bit vs 64-bit)
  • Boost availability
  • Platform (Linux vs macOS)

Building with Visual Studio (Windows)

Individual Visual Studio project files are provided for quick builds on Windows.

Using Visual Studio IDE

  1. Open the desired .vcxproj file in Visual Studio
  2. Select configuration (Debug/Release) and platform (x86/x64)
  3. Build → Build Solution (or press F7)
  4. Run the executable from the output directory

Available project files:

  • bf.vcxproj - Brainf*ck interpreter
  • calc.vcxproj - Calculator (requires Boost)
  • calc2.vcxproj - Alternative calculator (requires Boost)
  • quantize.vcxproj - Quantization example
  • test0.vcxproj - Basic tests
  • test_util.vcxproj - CPU utility
  • toyvm.vcxproj - Toy VM

Using MSBuild (Command Line)

# Build with MSBuild
msbuild test0.vcxproj /p:Configuration=Release /p:Platform=x64

# Or use the solution file if available
msbuild xbyak_samples.sln /p:Configuration=Release

Troubleshooting

CMake: “Cannot find Boost”

If Boost is installed but not detected:

cmake -DBOOST_ROOT=/path/to/boost ..

Linux: “cannot find -lstdc++”

Install the C++ standard library:

sudo apt-get install libstdc++-dev

Linux: “undefined reference to pthread”

This should be handled automatically by CMake. If issues persist, ensure pthreads is available:

sudo apt-get install libpthread-stubs0-dev

Windows: Static buffer and memfd targets fail

These targets are Linux-specific and use Linux memory mapping APIs. They are automatically excluded on Windows.

Notes

  • 64-bit vs 32-bit: On 64-bit systems, the *64 suffix indicates 64-bit builds. 32-bit builds have no suffix.
  • Platform-specific: Some samples (like static_buf and memfd) only work on Linux
  • Boost dependency: The calc samples require Boost.Spirit and are only built if Boost is detected
  • Warning flags: The build reads compiler warnings from ../test/CFLAGS_WARN.cfg (GCC/Clang only)

Running Brainf*ck Examples

Several Brainf*ck programs are included:

# On Windows
.\build\bin\Release\bf64.exe echo.bf
.build\bin\Release\bf64.exe hello.bf
.build\bin\Release\bf64.exe fizzbuzz.bf

# On Linux
./build/bin/bf64 echo.bf
./build/bin/bf64 hello.bf
./build/bin/bf64 fizzbuzz.bf

Additional Resources