assembly 比较两个汇编文件的好方法?

aurhwmvo  于 2023-10-19  发布在  其他
关注(0)|答案(1)|浏览(127)

我正在做一个简单的工具来分析编译器的“智能”,以识别某些函数/程序作为内置指令。对我来说,绊脚石是如何将编译器生成的汇编文件与另一个汇编文件进行比较,后者是预期代码的模板?简单地逐行比较两个文件这样的简单方法是行不通的,因为寄存器名称或额外的空格等微小的更改都会产生未通过的测试。
我正在用Python编写工具。
diff,Levenshtein距离

sg3maiej

sg3maiej1#

要考虑寄存器分配选择,可能需要生成指令之间的数据依赖关系图,就像https://uica.uops.info/一样,如果您选中“dependencies”复选框,然后在运行后单击“Open Dependencies”链接以生成结果。
比较图形的相似性可能是好的,因为指令之间的数据依赖性是乱序执行程序真正关心的。例如,inc eax/inc edxinc edx/inc eax没有显著差异,除了在有序CPU上(例如,如果前面的指令写EDX,那么它不能与P5上的inc edx配对,或者与ARM Cortex A53或A510上的R 0配对。不同的编译器版本/选项/调优设置通常会产生几乎相同的指令,具有相同的数据依赖关系,但具有不同的静态调度。
(uiCA只对非分支循环体有效,所以当你有控制依赖关系和数据依赖关系时,一般情况下可能会变得更复杂。
关于数据流图的更多信息,请参见BeeOnRope在每个汇编指令需要多少CPU周期中提到的https://fgiesen.wordpress.com/2018/03/05/a-whirlwind-introduction-to-dataflow-graphs/?(因为它是uiCA、IACA和LLVM-MCA等图形工具需要用来查找循环承载的依赖链,以找到循环中的瓶颈。

相关问题