【问题标题】:Why is an LLVM JIT-generated entry point so wordy under 64-bit Windows?为什么 LLVM JIT 生成的入口点在 64 位 Windows 下如此冗长?
【发布时间】:2011-03-15 03:57:09
【问题描述】:

我在 Windows 下使用 LLVM,只是想通过构建一些示例程序来更好地理解它。目前,我正在研究 HowToUseJIT。我注意到,当我运行 64 位时,我得到一个入口点,其中包含一些看起来非常疯狂的代码。它将rsi、rdi和xmm6-xmm15保存在堆栈上;然后设置 rax 和 rcx;然后在最终调用调用链中的下一个函数之前恢复所有先前保存的值。

这样做有充分的理由吗?或者这是否表明 Windows x64 上的 LLVM 还没有为黄金时段做好准备?

编辑:这是 LLVM 2.8。我刚刚下载了当前在 2.9 分支上的内容,但没有显示相同的行为。

【问题讨论】:

    标签: windows llvm


    【解决方案1】:

    这取决于。所有寄存器保存都是由于 Win64 ABI,当它们被调用者保存时,因此应该正确保存/恢复。

    没有消除它们 noop 加载/存储的原因可能是由于 JIT 默认使用的快速指令选择器。它会非常快地为您提供二进制代码,但会牺牲质量。

    尝试切换到正常的codegen,检查问题是否仍然存在。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-01
      • 1970-01-01
      • 2015-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-02
      相关资源
      最近更新 更多