LLJVM provides a free and open source set of tools and libraries for running comparatively low level languages (such as C) on the JVM.
The C to JVM bytecode compilation provided by LLJVM involves several steps. Source code is first compiled to LLVM intermediate representation (IR) by a frontend such as llvm-gcc or clang.
LLVM IR is then translated to Jasmin assembly code, linked against other Java classes, and then assembled to JVM bytecode.