This is a personal site dedicated to my open-source activities and services that I offer as an independent software engineer. I'm focusing on writing and designing high performance code in C++ language that takes advantage of CPU specific optimizations, multithreading, and JIT compilation. I have started several projects in this area that are successful and that should demonstrate my experience and engineering skills.
I'm an open source enthusiast and founder of the following open source projects:
- AsmJit - AsmJit is a lightweight library for machine code generation written in C++ language. It can generate machine code for x86 and x64 architectures with the support for the whole x86/x64 instruction set - from legacy MMX to the newest AVX512. It has a type-safe API that allows C++ compiler to do semantic checks at compile-time even before the assembled code is generated or executed. It also provides an optional register allocator that makes it easy to generate complex code without a significant development effort.
- Blend2D - Blend2D is a high performance 2D vector graphics engine written in C++ and released under the Zlib license. The engine utilizes a built-in JIT compiler to generate optimized pipelines at runtime and is capable of using multiple threads to boost the performance beyond the possibilities of single-threaded rendering. Additionally, the engine features a new rasterizer that has been written from scratch. It delivers superior performance while quality is comparable to rasterizers used by AGG and FreeType. The performance has been optimized by using an innovative approach to index data that is built during rasterization and scanned during composition. The rasterizer is robust and excels in rendering complex vector art and text.
Here is a list of smaller projects published on GitHub:
- AsmDB - Instructions database and utilities for X86 (X86/X64) and ARM (THUMB/A32/A64) architectures released into the public domain. Although not written in C++ (it's JSON data and JS tooling around it) I use it to generate highly compressed database of all instructions accessible through AsmJit API.
- AsmTK - Assembler toolkit based on AsmJit. A sister project that provides more functionality usually not required by JIT compilers. It provides assembler parser compatible with Intel syntax. AsmTK focuses more on non-JIT use cases and its future goal is to provide a foundation for creating libraries and executables.
- CULT - a tool that runs series of tests to estimate how many cycles an X86 processor (either in 32-bit or 64-bit mode) takes to execute each supported instruction. The tool output is designed to be processed by additional tools.
- MathPresso - A C++ library designed to parse mathematical expressions and compile them into machine code. It's much faster than traditional AST or byte-code based evaluators, because there is basically no overhead in the expression's execution. The JIT compiler is based on asmjit and works on X86 and X64 architectures.
- NJS - Neutral JS (NJS) interface for C++ targeting multiple JS engines (only V8 atm) and environments (node.js vs V8-only). NJS was developed together with blend2d-js as a result of many breaking changes in V8 engine that initially required many hours of refactoring. V8 is known for its breaking changes that did not only affect Chromium/Blink, but also many other projects, including node.js.
- GitHub - Personal github repository where I park projects that are either small or don't belong to anywhere else.
- Twitter - My tweets.
- LinkedIn - LinkedIn profile.
- AsmBits - My blog, mostly dedicated to AsmJit, Blend2D, and C++ in general.