1个不稳定版本
0.1.0-alpha | 2020年7月2日 |
---|
#31 in #jit
307 每月下载量
用于 direct-asm
770KB
16K SLoC
一个纯Rust汇编器,不是JIT。在direct-asm中使用,以获得最大的汇编控制。
这个crate实现了将汇编统一解析为指令、标签、表达式和一些架构(x86、x86_64、aarch64 WIP)的后端。它不是完全的Intel语法(但很接近),因为它应该能够嵌入环境中的表达式,我们将它们视为不可操作的任意不透明值。
没有全局状态,我们也不假设在proc-macro中执行,但这是一种可能的嵌入方式。在这种情况下,我们可以 组合 表达式,但不能评估它们。例如,要嵌入一些 A: u8
,其三个最低位给出输出字节最高三位的一个索引,我们要求环境为 (A & 0x7) << 5
生成一个新的表达式。这将在const eval后得到正确的结果,而不需要我们自己检查 A
的值。有了足够的这些组合器,我们可以完成汇编所需的全部操作。
这是一个正在进行中的重工作,欢迎任何贡献。解析器、新架构、更好的诊断。
限制:从环境 插入 指针和其他重定位不是容易的,甚至是不可能的。我们可以直接插入一个指针,这将不允许纯字节切片作为输出,并且需要一个实际的 struct
或复杂的枚举。然而,指针的位置必须在以后由链接器替换,它有一个描述MIR const eval中位置的替换值,因此我们可以检查其字节或插入关于它的复合算术表达式。这必须在运行时评估。(在一个非常愚蠢的举动中,我们会修改链接脚本以执行这个算术,但我们还不能这样做,基本功能应该在那时工作。另一个选择是编译器接口,对此有一些同情,但没有正式或具体的东西。)
依赖项
~215KB