10 个版本 (4 个破坏性更新)

0.5.0 2022年1月16日
0.4.0 2022年1月11日
0.3.0 2021年12月3日
0.2.3 2021年12月3日
0.1.2 2021年10月24日

#20 in #int

每月下载量 30 次

GPL-3.0 许可证

89KB
3K SLoC

emei

峨眉 (EMei) JIT/AOT 后端代码生成框架。

支持的指令

risc-v

  • rv32i
    • m 扩展
    • a 扩展
    • f 扩展
    • d 扩展
    • c 扩展
    • v 扩展
    • p 扩展
  • rv64i
    • m 扩展
    • a 扩展
    • f 扩展
    • d 扩展
    • c 扩展
    • v 扩展
    • p 扩展

请参阅 riscv 架构手册。

x86_64

警告:不支持的 x87 fpu 浮点运算符。

insts 规则

inst dst, src=inst(src, dst)

insts

  • mov

    • mov
    • mov_zero_extend_bit8/16
    • mov_sign_extend_bit8/16/32
    • mov_rev
    • movs(is movsq)
  • push

    • push_reg
    • push_imm
    • push_all pusha/pushad
  • add

    • add_first_reg
    • add_imm8
    • add_imm32
    • add
    • inc
    • inc_reg32
  • sub

    • sub_first_reg
    • sub_signed_imm8
    • sub_imm(32)
    • sub
    • sub_rev
    • dec
    • dec_reg32
  • mul

  • div

  • cmp

  • test

  • jump

    • jmp
      • 相对地址跳转
      • 跳转到地址字面量(jit 使用)
      • 跳转到寄存器
    • 条件跳转代码
      • /ja/jb/jc/je/jg/jl/jo/jp/js/jz/jae/jbe/jge/jle/jpe/jpo/jna/jnb/jnc/jne/jng/jnl/jno/jnp/jns/jnz/jnae/jnbe/jnge/jnle
  • call

    • 相对地址调用
    • 地址字面量调用(jit 使用)
    • 寄存器调用
  • ret

    • near_ret/near_ret_imm
    • far_ret/far_ret_imm
  • nop

    • nop(nop1)
    • nop1-9

关于硬件推理

  • int

    • intn
    • into
    • int3
    • int1
  • syscall

    • syscall
    • sysenter

sse 浮点指令

  • movss/movsd
  • addss/addsd
  • subss/subsd
  • mulss/mulsd
  • divss/divsd
  • sqrtss/sqrtsd
  • cmpss/cmpsd

sse simd 指令

  • movupd/movupd_rev

示例

查看 src/lib.rs.

依赖关系

~2MB
~37K SLoC