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 次
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
- jmp
-
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