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

    <tr>
        <th>Summary</th>
        <td>
            [llvm-exegesis] Cannot execute snippets using segment registers
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            tools:llvm-exegesis
      </td>
    </tr>

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

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

<pre>
    Currently, it is difficult to execute snippets on x86 that use the segment registers like `%fs` or `%gs` as there is no way currently to control their values. So snippets like the following:
```asm
# LLVM-EXEGESIS-DEFREG R12 12345600
# LLVM-EXEGESIS-MEM-DEF MEM 4096 0000000012345600
# LLVM-EXEGESIS-MEM-MAP MEM 23456242130944
        movq    %fs:16, %r12
```
Just trying to set the segment register value with a `LLVM-EXEGESIS-DEFREG` annotation doesn't work as the standard move instructions can't move values into the segment registers. There are some user space instructions introduced in sandy bridge and zen that enable setting it in userspace, but it can also be done with a system call (on Linux).

This only makes sense in the subprocess mode as segment registers are only really useful when accessing memory.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyMVF1v5CYU_TXMy1VGGGwnfvBDmsysWmWkarOq-orta5sGw5QLmbi_voJxu9oklYpGg4D7ec7xVUR6sogtq35iQnTOLcoqPaAtqpIJwarHnYphdr798W3XuWFtH6L3aINZmXgAHUATDHocdR9NgOAA37CPAYGsPp8xEDgLb3c1hFkFiIQQZgTCaUEbwOOkKaAnMPoFgdWciWokVnNwfjtO-agoOXpM-ayDi1qh_6eSlLZ3NnhnkpH28KpMRNrDs_teR86Qko_OGHfRdmLynvFHxu9TovxTtGw3QsLT02-nm8Pvhy-H55-fbx4Px6-HL_C1EFAIWVY15_9lejqckjmcDicoeVMD39b_cTzd_5ods6koRSF5U5ZXD9jW4l7_TPsVLHlf1IkMJipfiHcdXY-_RAoQ_KrtlMAiDJ_ScMUNLjrMoBL8n0GQ2bDWBRW0szA4JMvEbYCL8y8bT0BB2UH5IZWKoC0FH_tkT9Crq3l-uRIF2gb3uTD28C3TrjwCuQWThDzQWfXvwurE_xB7HEBbIGWHFTqvhwlB2QH-QnuVIFrVmZQohIRGUrDNQXPMhGMXQ7rulQVlyEGHMDj7Lyy0UsAFemUMMHHnLDxpG9-YaPYb9vn_26yT9s0Ki3pBAkJLqeRrm7E7e9cjESxuwITax08itZwDeFTGrKnIMRq4zGhB9ck5NbDg4vy63w2tHBrZqB22xS2XZVXIWu7m9rYuKywVb_hYNaJsRnHXYyHlWDWVkAPudCu4kIUQpeBVzeW-6ceyHhqpaimEKCtWclyUNntjXpe989NOE0Vsb2tZ8p1RHRrahklwziRBJssbfMMJSdM2U3ybb7s4ESu50RToe8Sgg8kT6UfP6hEestY-jpWYu_-A2i56084hnFMZTByZOE46zLHb925h4pjib9vN2bs_sA9MHHNDxMQx9_R3AAAA__-YXam4">