<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/82557>82557</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [X86] LLVM crashes disassembling invalid segment register copy instruction
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            backend:X86,
            mc
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          rnk
      </td>
    </tr>
</table>

<pre>
    Reproducer:
```
echo '0xd5 0xc5 0x20 0xef' | llvm-mc --disassemble 
        .text
 movq    %llvm-mc: gen/llvm/lib/Target/X86/MCTargetDesc/X86GenAsmWriter.inc:62295: static const char *llvm::X86ATTInstPrinter::getRegisterName(MCRegister): Assertion `RegNo && RegNo < 388 && "Invalid register number!"' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0.      Program arguments: llvm-mc --disassemble
 #0 0x0000556cf7ca85b8 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) /usr/local/google/home/rnk/llvm-project/build/../llvm/lib/Support/Unix/Signals.inc:723:13
 #1 0x0000556cf7ca62ee llvm::sys::RunSignalHandlers() /usr/local/google/home/rnk/llvm-project/build/../llvm/lib/Support/Signals.cpp:106:18
 #2 0x0000556cf7ca8c4d SignalHandler(int) /usr/local/google/home/rnk/llvm-project/build/../llvm/lib/Support/Unix/Signals.inc:413:1
 #3 0x00007f29edc36510 (/lib/x86_64-linux-gnu/libc.so.6+0x3c510)
 #4 0x00007f29edc840fc __pthread_kill_implementation ./nptl/pthread_kill.c:44:76
 #5 0x00007f29edc36472 raise ./signal/../sysdeps/posix/raise.c:27:6
 #6 0x00007f29edc204b2 abort ./stdlib/abort.c:81:7
 #7 0x00007f29edc203d5 _nl_load_domain ./intl/loadmsgcat.c:1177:9
 #8 0x00007f29edc2f3a2 (/lib/x86_64-linux-gnu/libc.so.6+0x353a2)
 #9 0x0000556cf82ced88 /usr/local/google/home/rnk/llvm-project/build/gen/llvm/lib/Target/X86/MCTargetDesc/X86GenAsmWriter.inc:62295:3
#10 0x0000556cf82cf0bb llvm::X86ATTInstPrinter::printRegName(llvm::raw_ostream&, llvm::MCRegister) const /usr/local/google/home/rnk/llvm-project/build/../llvm/lib/Target/X86/MCTargetDesc/X86ATTInstPrinter.cpp:39:42
#11 0x0000556cf82cd3f1 llvm::X86ATTInstPrinter::printInstruction(llvm::MCInst const*, unsigned long, llvm::raw_ostream&) /usr/local/google/home/rnk/llvm-project/build/gen/llvm/lib/Target/X86/MCTargetDesc/X86GenAsmWriter.inc:61563:17
#12 0x0000556cf82cf1fc llvm::X86ATTInstPrinter::printInst(llvm::MCInst const*, unsigned long, llvm::StringRef, llvm::MCSubtargetInfo const&, llvm::raw_ostream&) /usr/local/google/home/rnk/llvm-project/build/../llvm/lib/Target/X86/MCTargetDesc/X86ATTInstPrinter.cpp:0:5
#13 0x0000556cf7bcc005 llvm::MCTargetStreamer::prettyPrintAsm(llvm::MCInstPrinter&, unsigned long, llvm::MCInst const&, llvm::MCSubtargetInfo const&, llvm::raw_ostream&) /b/f/w/set_by_reclient/a/../llvm/lib/MC/MCStreamer.cpp:1073:1
```

This works if you replace `0xef` with anything in the range `0xe7-0xef`, but `0xe0-0xe7` disassembles as:
```
       movq    %gs, %r8 ; (up to %r15)
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzEl0Fv2zoSxz8NfSFiUCNRkg8-uM7zboDmoUiyu70ZFEXL3EiUlqQa-9svhpIj28222zbFKwrFGkt_z_xmyBkK53RllFoS_oHw25no_b61S2ueZ0VbHpcPqrNt2UtlSbwi7JawFUnZ-D_cKrlvKYGMHUpO2UHiBRhlB7UjkFGSrWldf2luGklvbkrthHOqKWpFh9fp-G_u1cGPpqb98h-0EeDjqyRe0UoZAhs04B9dENg8CVspT2DzOU8JbO7Xg-FWOTkY_6bMyjX_storO9cGdVKABUc954XXksrWOE_lXlhKYBXk4xWJV5_zdPX0dGec_2S18QOAeFUp_6Aq7byyf4pGEcjv1ycDgQUKr5xT1uvWUJKyB1X9iXxSAikdb-I1jfP8ZCQAd-aLqHVJ7ShETd8UqBcRAKS4E7pW5Xzg8-njH6vHP6jri0Z7KmjRV9SqrrWe-pbuve8c-gobAptK-31fzGXbnLFDpp1t_60kstPO9coR2FBhSqqNrPtSUb9XVFrh9rQQ8tlbIdX4849eyGda9k33WhJsPiTxk20rKxoqbNU3ynj04-3sj5kmEGOpMMYY56ncZVLkvMjplAZ3dMOHkIXw20_oDIF8esiKl23rvFWiCVDXVBtPYEEJbHpnMeZWihp5tG1VKwKbfYvJ21jz_DWRotd1SWAzn18X3GPfIWcCm38YfUCDroyo3VhbGcQkXkXxFF10FV0KSr0V3UNvBqm_C1PWyjoC-e8N4OS57DCPEUvxmk-ew3VeZFLSCx8J5H8N5iQKmCdf49HXbAcLVco45RGjgeAoeMjTbZrc1Nr0h5vK9MMXcu7aeUrgAzvEkkcM1--rZnKpmSdsJ-l22_m9VaLcPuu63uqmqxUWugjLHeMwnUcA54_Ng88J1kc66fNrn5MMqBXaqaDjQsQnOu7oStXhIu1aF4iEJ4MyZLirTcLppTCwpAAqCtwegpQvBybBFBTyCH2bFLJrhbjkdGvqbd2Kclu2jdBDsNqEYNHcuEqKQS6KMnTpjGV-JbiLBfxgfngs4CI_i_P6zEGqMmypv1KI79xhxm0AdwF25eyOFQX9bq_p8AZ7xtBovrXfTd9dtKOxu733-vwulctoxj0mxu6YwEQluqJSxrvo_6SCVttLXHYXZO7Xd6GdY9gEVoimN2HEKWndmuqS1TXHX93J3quAIp6GHS6bWMF1BUU7-QOsfgHSo7faVA84zl3W2WNf-BDMndm1J7X09xJ-r1pkJF7xiW580ewKKRnjF7EOoo8hkAmu8v4YdFeueYPwKRUDlG8gvkzIVwv6p0Ejnx2BzQvu-8pvi-PWKllrhW17I97keb8Ol1Oor_NBdtZzr44Aw_Vprx19ae2zo3pHj22PQ2ktpMIxOBwHUkZftN9TYY5-r01FtQlzphWmOj2V3YyPYnhF70czQ3OGCmdDpKPC_a9jyXisODtKVA4lCXCbUxJ_wP7Tdzgxoynir83lVWhWLuNyES_ETC2jjOU8jZJFMtsvkygCmUZlytOCJ1nKo1TxPBIgOF9kSs70EhgkDAAYg4Qn8zTepYXayRJAFnKXkoSpRuh6jujnra1mYQpf5sB5NqtFoWoXjmQAOH4rUw5rPBwH1gSgkfiR387sMqyUoq8cSVitnXeTqNe-Dkc7fJXf0o8f_3k_TPXKnYEcUjEcQZyqcKCZjiKy7Y5UT9vtrLf18ucPGSHC_wYAAP__iH1m8g">