emei
The 峨眉 (EMei) JIT/AOT backend codegen framework.
Support Instructions
risc-v
- [x] rv32i
- [x] m extension
- [x] a extension
- [x] f extension
- [x] d extension
- [ ] c extension
- [ ] v extension
- [ ] p extension
- [x] rv64i
- [x] m extension
- [x] a extension
- [x] f extension
- [x] d extension
- [ ] c extension
- [ ] v extension
- [ ] p extension
Please refer to the riscv arch manual.
x86_64
warning: unsupported x87 fpu float operator.
insts rule
inst dst, src
=inst(src, dst)
insts
- mov
- mov
- movzeroextendbit8/16
- movsignextendbit8/16/32
- mov_rev
- movs(is movsq)
push
- push_reg
- push_imm
- push_all pusha/pushad
add
- addfirstreg
- add_imm8
- add_imm32
- add
- inc
- inc_reg32
sub
- subfirstreg
- subsignedimm8
- sub_imm(32)
- sub
- sub_rev
- dec
- dec_reg32
mul
div
cmp
test
jump
- jmp
- jmp to relative addr
- jmp to addr literal (jit use it)
- jmp to register
- jump cond code
- /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
- call to relative addr
- call to addr literal (jit use it)
- call to register
ret
- nearret/nearret_imm
- farret/farret_imm
nop
about headware inference
sse float instruction
- movss/movsd
- addss/addsd
- subss/subsd
- mulss/mulsd
- divss/divsd
- sqrtss/sqrtsd
- cmpss/cmpsd
sse simd instruction
Example
look src/lib.rs.