<div dir="ltr">I have a bit of a riddle:<div><br></div><div>In <a href="http://reviews.llvm.org/D19904">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>