2022.04.25

AsmJit

https://asmjit.com/

cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=1 -DASMJIT_TEST=1 ..

Doc Reading

https://asmjit.com/doc

  • Core
    • CodeHolder
      • ...
      • CodeBuffer
      • ...
    • BaseEmitter
    • Others
  • Assembler: directly into CodeBuffer
  • Builder: emit into Nodes, max compatible with Assembler
    • InstNode
    • AlignNode: alignment directive (.align)
    • LabelNode
    • ...
  • Compiler: high-level, on top of Builder
    • FuncNode
    • FuncRetNode
    • InvokeNode
    • ...
2022.04.26

tests

asmjit_test_assembler_x86.cpp

并没能完全覆盖所有编码(encoding), 比如内存地址计算, ptr( , , , )这个函数, offset(base, index, scale), 并没有包含所有scale。

2022.05.26

覆盖指令编码

cmn操作没有覆盖shift类型,很多指令都没有覆盖shift类型。

希望使用asmjit覆盖aarch64的指令编码应该不是简单能完成的。 比如cmn指令的extend和shift的reg编码, 不是在a64instdb.cpp的_instInfoTable里完成的, 而是在a64assembler.cpp的Assembler::_emit大一统的函数里的case InstDB::kEncodingBaseCmpCmn里实现的。 这样的设计并不能很方便的遍历指令编码。

x86的指令指令编码看起来都在x86instdb.cpp的几个Table里,很适合程序遍历。