#jit #solely #help #phase #macro-rules #link #libc

nightly lejit

纯 Rust 编写的 JIT 库

1 个不稳定版本

使用旧的 Rust 2015

0.0.1 2014年12月8日

#4 in #solely

MPL-2.0 许可证

19KB
526 代码行数(不包括注释)

LeJIT Build Status

一个简单的 Rust 编写的 JIT 库。任何帮助都十分欢迎。

依赖项

  • Rust (从 Git)

构建说明

make

许可证

版权 (C) 2014 由 Arcterus。保留所有权利。
根据 MPL v2.0 许可。有关更多信息,请参阅 LICENSE.txt。


lib.rs:

一个(希望)简单的 JIT 库。

示例

#![feature(macro_rules, globs, phase)]

#[phase(plugin, link)]
extern crate lejit;
extern crate libc;

use lejit::*;
use lejit::JitOp::*;
use lejit::JitReg::*;

fn main() {
   let mut jit = Jit::new();

   jit.build_function("add_four".to_string(), |func| {
       func.op(Movrr(R1, R2))
           .op(Addri(R1, 4))
           .op(Call("sub_four"))
           .end();
   });

   jit.build_function("sub_four".to_string(), |func| {
      func.op(Movrr(R1, R2))
          .op(Subri(R1, 4))
          .op(Call("random_stuff"))
          .end();
   });

   jit.build_function("random_stuff".to_string(), |func| {
      let op = func.op(Subri(R1, 7))
                   .op(Addri(R1, 1000000000));
      let op2 = op.op(Subri(R1, 500000000))
                  .op(Movri(R1, 1))
                  .op(Movri(R1, 10000));
      op2.op(Movri(R1, 1000000000000))
         .end();
   });

   let add = jit_compilefn!(jit, (int) -> int);
   println!("add(4): {}", add(4));
}

没有运行时依赖