# Overview Libnative is an emulation library for Hexagon, provided as part of the Hexagon compiler toolchain. It works by providing C++ function definitions for the existing compiler intrinsics. These functions define the behavior of the Hexagon target so that code written against Hexagon intrinsics can be compiled and run natively on x86 or ARM, as an ordinary Linux or Windows executable. The main goal of Libnative is to provide this functionality without sacrificing speed or ease of use. Libnative runs hundreds of times faster than the Hexagon simulator in many tests, and can be linked against existing C++ code with extremely minimal modification. The same source can therefore be used for both Libnative and the Hexagon target. Libnative is intended for functional work: unit testing, and porting code to or from the Hexagon processor. It is not a performance model – see [Restrictions and known behavior](https://docs.qualcomm.com/doc/80-N3040-23/topic/libnative-ug-restrictions.html#libnative-restrictions). ## Features - Support for scalar Hexagon intrinsics, as well as all extensions - Multiple architecture versions in a single library, selected at run time. See [Architecture versions](https://docs.qualcomm.com/doc/80-N3040-23/topic/libnative-ug-architecture-versions.html#libnative-arch). - Runtime configuration through TOML, replacing the compile-time and ad hoc API configuration of earlier releases. See [Configuration](https://docs.qualcomm.com/doc/80-N3040-23/topic/libnative-ug-configuration.html#libnative-config). - Prebuilt for Linux and Windows on both x86\_64 and AArch64. ## Emulation model Each intrinsic is an ordinary function call into the library. The emulated processor state – HMX register files, USR, and DMA state – lives in library-managed storage, per thread by default. State is created on first use. The first intrinsic call also initializes the library and freezes the configuration, so all configuration must be complete before that point. See [When configuration can be changed](https://docs.qualcomm.com/doc/80-N3040-23/topic/libnative-ug-configuration.html#libnative-config-timing). The host application calls Libnative intrinsics, which have individual underlying implementations for every supported architecture. These implementations represent the behavior of their respective architecture, and may differ from one another. Furthermore, different configuration, such as the settable USR bits or vector length, may introduce further differences in behavior. Important Libnative will default to the most recent supported arch version if no other parameter is passed Last Published: Oct 06, 2026 [Previous Topic Technical assistance](https://docs.qualcomm.com/bundle/publicresource/80-N3040-23/topics/libnative-ug-introduction.md) [Next Topic Migrate from Libnative 21.0 and prior](https://docs.qualcomm.com/bundle/publicresource/80-N3040-23/topics/libnative-ug-migration.md)