V8开发人员在这里。CodeStubAssembler并不是为了让您精确控制发出什么汇编指令而设计的-它与平台无关,这是其存在的重要原因。
你可以看一下MathBuiltinsAssembler::MathMaxMin在src/builtins/builtins-math-gen.cc其两个呼叫站点在同一文件进一步往下看,你会怎样表达最小/最大操作(或其他条件的选择),在CSA的序列。然后由为CSA提供动力的Turbofan后端在每个平台上选择适当的机器指令。如果您认为可以改进机器代码,那么解决该问题的方法将是改进Turbofan的指令选择器(和/或更早的优化过程)以检测相关模式。
如果您实际上是想手工编写特定于平台的程序集,也可以这样做:您可以使用特定于平台的MacroAssembler(在x64上公开)cmp和,而不是CodeStubAssembler cmov。剩下一些这样的内置函数,您可以作为示例进行研究,请参阅src/builtins/x64/builtins-x64.cc。过去有很多这样的方法,但是我们几乎将所有方法都迁移到了其他实现技术,例如C ++,CSA或Torque,因为读/写/调试/维护汇编代码非常耗时且容易出错。