Skip to content

CLimber-Rong/jitrix

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

jitrix

关于jitrix

  • jitrix是一个基于x86_64架构的虚拟机。
  • jitrix读作J Tricks
  • 正如项目名称的前三个字母jit所言,本项目用于尝试开发一个极度轻量化的带有JIT功能的虚拟机。
  • jitrix只由不到一千行的C/C++代码组成,但却拥有基于Copy-and-PatchJIT功能。经测试,启用JIT功能能使性能提升约20%

项目架构

  • doc存放着jitrix的相关文档。
  • stencil存放着用于生成模板机器码的相关文件,其中:
    • stencil.cpp存放着模板代码。
    • 构建项目时,会将stencil.cpp编译到stencil.o,再反编译到stencil.objdump
    • codegen.py负责解析stencil.objdump的关键数据,并生成jit_data.hpp
  • src存放着虚拟机的核心代码,其中:
    • config.hpp负责管理构建虚拟机所需的自定义配置。
    • arena.hpp负责内存分配与管理。
    • bin.hpp负责读取虚拟机字节码。
    • vm.hpp存放着虚拟机的数据结构
    • jit.hpp存放着JIT编译器。
    • runner.hpp是虚拟机的运行器核心代码。
    • main.cpp是项目的入口和命令行工具实现。
  • test存放着测试用的文件。

汇编器

汇编器为assembler.py,采用AI生成,用法为:

python assembler.py <assembly filename> <bytecode filename>

项目配置

config.hpp中,JITRIX_JIT_ENABLED宏由于控制是否启用该项目的JIT功能。

项目提供了两种JIT方式:一种是将单条指令编译为一个JIT函数;另一种是将一个基本代码块编译成一个JIT函数,但这涉及了尾递归语法,即GNU语法中的__attribute__。显然后者能够带来更强的JIT优化,但后者也同样需要使用支持GNU语法的编译器才能编译。config.hpp会自动检测当前编译器是否支持相关语法,如果支持则设置JITRIX_JIT_MUSTTAIL1并使用尾递归优化。

构建方法

此项目目前支持在使用x86_64架构上的WindowsLinux平台上构建运行。

此项目的构建文件是Makefile,其中$(BIN)代表编译出来的可执行文件名,$(COMPILER)是用于编译项目主体的编译器。

构建此项目需要:

工具名 用途 参考版本
make 运行构建脚本 GNU Make 4.4.1
python 3 解析机器码并生成模板数据 Python 3.12.13
clang++ 编译机器码模板 clang version 21.1.2
C++编译器 编译项目主体 可以选择clang++或其他编译器,例如gcc version 15.2.0

Makefile提供的构建命令如下:

构建命令 解释
make sten 只编译机器码模板
make debug 编译出未经优化且携带调试信息的可执行文件,通常用于调试
make 可以编译出经过优化且未携带调试信息的可执行文件,通常用于编译发行版

运行方法

使用jitrix version可以查看项目版本。 使用jitrix help可以获取帮助信息

特别的...

由于此项目旨在提供一个具有JIT功能的VM的最小实现,因此没有提供详尽的错误捕获功能,这意味着在字节码编码、运行等过程中,由用户导致的任何错误都有可能使得虚拟机直接崩溃。

本项目目前没有为虚拟机加入错误捕获的打算。

About

A lightweight x86_64-based virtual machine with Copy-and-Patch JIT capability.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors