<div dir="ltr">That instruction doesn't have the right semantics. I need to be able to express a 32-bit (or 64-bit) comparison where the 8-bit operand is sign extended. See the test case.<div><br></div><div>Peter</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Jan 30, 2017 at 10:31 AM, Rafael Avila de Espindola <span dir="ltr"><<a href="mailto:rafael.espindola@gmail.com" target="_blank">rafael.espindola@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Why is this needed? Why not just use<br>
<br>
cmpb $foo, %al<br>
<br>
Cheers,<br>
Rafael<br>
<br>
Peter Collingbourne via Phabricator via llvm-commits<br>
<div><div class="h5"><<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a>> writes:<br>
<br>
> pcc created this revision.<br>
> pcc added reviewers: RKSimon, craig.topper, majnemer.<br>
> pcc added a subscriber: llvm-commits.<br>
><br>
> @ABS8 can be applied to symbols which appear as immediate operands to<br>
> instructions that have a 8-bit immediate form for that operand. It causes<br>
> the assembler to use the 8-bit form and an 8-bit relocation (e.g. R_386_8<br>
> or R_X86_64_8) for the symbol.<br>
><br>
><br>
> <a href="https://reviews.llvm.org/D28688" rel="noreferrer" target="_blank">https://reviews.llvm.org/<wbr>D28688</a><br>
><br>
> Files:<br>
>   llvm/docs/Extensions.rst<br>
>   llvm/include/llvm/MC/MCExpr.h<br>
>   llvm/lib/MC/MCAssembler.cpp<br>
>   llvm/lib/MC/MCExpr.cpp<br>
>   llvm/lib/Target/X86/<wbr>MCTargetDesc/<wbr>X86ELFObjectWriter.cpp<br>
>   llvm/test/MC/X86/abs8.s<br>
><br>
</div></div>> Index: llvm/test/MC/X86/abs8.s<br>
> ==============================<wbr>==============================<wbr>=======<br>
> --- /dev/null<br>
> +++ llvm/test/MC/X86/abs8.s<br>
> @@ -0,0 +1,8 @@<br>
> +// RUN: llvm-mc -filetype=obj %s -o - -triple i686-pc-linux | llvm-objdump -d -r - | FileCheck --check-prefix=32 %s<br>
> +// RUN: llvm-mc -filetype=obj %s -o - -triple x86_64-pc-linux | llvm-objdump -d -r - | FileCheck --check-prefix=64 %s<br>
> +<br>
> +// 32: 0: 83 ff 00  cmpl $0, %edi<br>
> +// 32:   00000002:  R_386_8 foo<br>
> +// 64: 0: 83 ff 00  cmpl $0, %edi<br>
> +// 64:  0000000000000002:  R_X86_64_8 foo+0<br>
> +cmp $foo@ABS8, %edi<br>
> Index: llvm/lib/Target/X86/<wbr>MCTargetDesc/<wbr>X86ELFObjectWriter.cpp<br>
> ==============================<wbr>==============================<wbr>=======<br>
> --- llvm/lib/Target/X86/<wbr>MCTargetDesc/<wbr>X86ELFObjectWriter.cpp<br>
> +++ llvm/lib/Target/X86/<wbr>MCTargetDesc/<wbr>X86ELFObjectWriter.cpp<br>
> @@ -96,6 +96,7 @@<br>
>    default:<br>
>      llvm_unreachable("<wbr>Unimplemented");<br>
>    case MCSymbolRefExpr::VK_None:<br>
> +  case MCSymbolRefExpr::VK_ABS8:<br>
>      switch (Type) {<br>
>      case RT64_64:<br>
>        return IsPCRel ? ELF::R_X86_64_PC64 : ELF::R_X86_64_64;<br>
> @@ -219,6 +220,7 @@<br>
>    default:<br>
>      llvm_unreachable("<wbr>Unimplemented");<br>
>    case MCSymbolRefExpr::VK_None:<br>
> +  case MCSymbolRefExpr::VK_ABS8:<br>
>      switch (Type) {<br>
>      case RT32_32:<br>
>        return IsPCRel ? ELF::R_386_PC32 : ELF::R_386_32;<br>
> Index: llvm/lib/MC/MCExpr.cpp<br>
> ==============================<wbr>==============================<wbr>=======<br>
> --- llvm/lib/MC/MCExpr.cpp<br>
> +++ llvm/lib/MC/MCExpr.cpp<br>
> @@ -205,6 +205,7 @@<br>
>    case VK_SECREL: return "SECREL32";<br>
>    case VK_SIZE: return "SIZE";<br>
>    case VK_WEAKREF: return "WEAKREF";<br>
> +  case VK_ABS8: return "ABS8";<br>
>    case VK_ARM_NONE: return "none";<br>
>    case VK_ARM_GOT_PREL: return "GOT_PREL";<br>
>    case VK_ARM_TARGET1: return "target1";<br>
> @@ -314,6 +315,7 @@<br>
>      .Case("imgrel", VK_COFF_IMGREL32)<br>
>      .Case("secrel32", VK_SECREL)<br>
>      .Case("size", VK_SIZE)<br>
> +    .Case("abs8", VK_ABS8)<br>
>      .Case("l", VK_PPC_LO)<br>
>      .Case("h", VK_PPC_HI)<br>
>      .Case("ha", VK_PPC_HA)<br>
> Index: llvm/lib/MC/MCAssembler.cpp<br>
> ==============================<wbr>==============================<wbr>=======<br>
> --- llvm/lib/MC/MCAssembler.cpp<br>
> +++ llvm/lib/MC/MCAssembler.cpp<br>
> @@ -741,6 +741,10 @@<br>
>    MCValue Target;<br>
>    uint64_t Value;<br>
>    bool Resolved = evaluateFixup(Layout, Fixup, DF, Target, Value);<br>
> +  if (Target.getSymA() &&<br>
> +      Target.getSymA()->getKind() == MCSymbolRefExpr::VK_ABS8 &&<br>
> +      Fixup.getKind() == FK_Data_1)<br>
> +    return false;<br>
>    return getBackend().<wbr>fixupNeedsRelaxationAdvanced(<wbr>Fixup, Resolved, Value, DF,<br>
>                                                     Layout);<br>
>  }<br>
> Index: llvm/include/llvm/MC/MCExpr.h<br>
> ==============================<wbr>==============================<wbr>=======<br>
> --- llvm/include/llvm/MC/MCExpr.h<br>
> +++ llvm/include/llvm/MC/MCExpr.h<br>
> @@ -190,6 +190,7 @@<br>
>      VK_SECREL,<br>
>      VK_SIZE,      // symbol@SIZE<br>
<span class="">>      VK_WEAKREF,   // The link between the symbols in .weakref foo, bar<br>
> +    VK_ABS8,<br>
><br>
</span>>      VK_ARM_NONE,<br>
>      VK_ARM_GOT_PREL,<br>
> Index: llvm/docs/Extensions.rst<br>
> ==============================<wbr>==============================<wbr>=======<br>
> --- llvm/docs/Extensions.rst<br>
> +++ llvm/docs/Extensions.rst<br>
> @@ -207,6 +207,17 @@<br>
>  Target Specific Behaviour<br>
>  =========================<br>
><br>
> +X86<br>
> +---<br>
> +<br>
> +Relocations<br>
> +^^^^^^^^^^^<br>
> +<br>
> +``@ABS8`` can be applied to symbols which appear as immediate operands to<br>
> +instructions that have a 8-bit immediate form for that operand. It causes<br>
> +the assembler to use the 8-bit form and an 8-bit relocation (e.g. ``R_386_8``<br>
> +or ``R_X86_64_8``) for the symbol.<br>
> +<br>
>  Windows on ARM<br>
>  --------------<br>
><br>
> ______________________________<wbr>_________________<br>
> llvm-commits mailing list<br>
> <a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a><br>
> <a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr">-- <div>Peter</div></div></div>
</div>