- 经验生成多种initial mappings
- 算法验证intial mappings
简单、有效。
总结:靠经验设计匹配算法
initial mapping =execution=> final mapping
Q:精确异常?应该没法做到。
Q:为何不建立guest-IR的映射?疑惑是guest-IR和host-IR的映射。Parameterization of operands会变简单吗?
Introduction
缓解翻译优化中的多对一和多对多难题。编译到guest和host,通过调试符号信息建立一行源码在俩平台的汇编码对应关系。
Issues and Challenges
Learning Scope
学习的最小单位不宜过大,一行源码
Parameterization of Operands
我:把host指令和guest指令看作两个函数$$f_{host}(oprands),\ f_{guest}(oprands)$$。需要取$$f_{host}和f_{guest}$$定义域的公共部分。
文章为了减少工作,做了两点要求:host寄存器能够容纳guest寄存器,host和guest尾端相同。
Verification of Semantic Equivalence
符号化执行
Learning Binary Translation Rules
Preparation for learning
预处理代码(-E)
整理代码行(clang-format)
Parameterization of Operands
启发式的映射操作数
- 只考虑同类型操作数(共3类,寄存器、内存、立即数)
- 立即数配合算术逻辑运算
- 一个寄存器至多映射映射一次
live-in operand的live是指会被用到,in是指从块外输入的。
Verification of Semantic Equivalence
使用符号执行对比语义是否相同。
我去稍微学习了一下SMT-LIB这个语言,和实现这个语言的求解器Z3。
Applying Translation Rules
指令块的操作码做HASH,用以搜索匹配。
Implementation
使用的各个开源项目
Experimental Result
实验做的是真丰富,不愧是在顶会发表的。(我觉得应该是实验室项目积累多,顶会不是一蹴而就的)
用LLVM编译器,也用了GCC说明和编译器依赖不大。
还实现了TCG转LLVM IR再用LLVM JIT运行,作为参照。
Learning Results
能够学到的源码覆盖率(行数比例)24%
Performance Study
SPEC2006提速20%+