<div dir="ltr"><div>This appears to work: </div><div><br></div>auto Target = OutContext.createLinkerPrivateTempSymbol();<div><br></div><div>with </div><div><br></div><div><div>auto Target = OutContext.createTempSymbol();</div></div><div><br></div><div>-Nirav<br></div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Jun 22, 2016 at 3:10 AM, Dean Michael Berris via llvm-dev <span dir="ltr"><<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">I have a bit of a riddle:<div><br></div><div>In <a href="http://reviews.llvm.org/D19904" target="_blank">http://reviews.llvm.org/D19904</a> I'm trying to spell the following assembly:</div><div><br></div><div>  .palign 2, 0x90</div><div>  jmp +0x9</div><div>  nopw 512(%rax,%rax,1)</div><div>  // rest of the code</div><div><br></div><div>I try the following snippet to accomplish this:</div><div><br></div><div><div>  OutStreamer->EmitLabel(CurSled);</div><div>  OutStreamer->EmitCodeAlignment(4);</div><div>  auto Target = OutContext.createLinkerPrivateTempSymbol();</div><div><br></div><div>  // Use a two-byte `jmp`. This version of JMP takes an 8-bit relative offset as</div><div>  // an operand (computed as an offset from the jmp instruction).</div></div><div>  OutStreamer->EmitInstruction(</div><div>      MCInstBuilder(X86::JMP_1)</div><div>          .addExpr(MCSymbolRefExpr::create(Target, OutContext)),</div><div>      getSubtargetInfo());</div><div>  EmitNops(*OutStreamer, 9, Subtarget->is64Bit(), getSubtargetInfo());</div><div>  OutStreamer->EmitLabel(Target);</div><div><br></div><div>Which turns into:</div><div><br></div><div>.Lxray_sled_0:</div><div>  .palign 2, 0x90</div><div>  jmp .Ltmp0</div><div>  nopw 512(%rax,%rax,1)</div><div>.Ltmp0:</div><div>  // rest of the code</div><div><br></div><div>Is there a way of forcing the lowered JMP instruction to turn into a two-byte jump that does a short relative jump (one that fits within 8 bits)? When I run the binary and disassemble the function I'm seeing it turn into a 5-byte jump (jmpq <32-bit offset>) instead of a 2-byte jump (jmp <8-bit offset>).</div><div><br></div><div>Thanks in advance!</div></div>
<br>_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br>
<br></blockquote></div><br></div>