【问题标题】:Emit only long jump instructions instead of short jump instructions for LLVMLLVM 只发出长跳转指令而不是短跳转指令
【发布时间】:2015-03-13 21:07:21
【问题描述】:

有什么简单的方法可以让 LLVM 不发出带有 1-byte-displacement 的短跳转指令,比如 75 30 JNE +30eb 1a JMP +1a等; 而是只发出带有 3 字节零填充的 4-byte-displacement 跳转指令,例如 0f 85 30 00 00 00 JNE +30e9 1a 00 00 00 JMPQ +1a等, x86_64架构下?

显然,这会增加代码大小。

【问题讨论】:

  • 用于研究目的。禁用放松是什么意思?
  • 是的,四字节位移大于一字节位移。

标签: assembly compiler-construction llvm compiler-optimization instrumentation


【解决方案1】:

X86AsmBackend.cpp 中有一个函数fixupNeedsRelaxation。如果你总是在这里返回 true,它应该总是放松,例如改为全排量。

【讨论】:

  • -mc-relax-all 传递到后端可能是一种侵入性较小且跨目标的替代方案
  • RelaxInstruction()可以选择性地只选择跳转指令放宽吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多