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

    <tr>
        <th>Summary</th>
        <td>
            RISC-V: register __asm__ ("tp") doesn't access TP
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

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

    <tr>
      <th>Reporter</th>
      <td>
          palmer-dabbelt
      </td>
    </tr>
</table>

<pre>
    This came up as part of a glibc patch review <https://inbox.sourceware.org/libc-alpha/87wmifdems.fsf@mid.deneb.enyo.de/>. Looks like this `register ... __asm__ ("tp")` syntax isn't working in clang.

````
void *
__thread_pointer (void)
{
   register void *__tp __asm__ ("tp");
   return __tp;
}
````

generates 

````
__thread_pointer():
        ret
````

GCC generates

````
__thread_pointer():
        mv      a0,tp
 ret
````

which is the sort of thing I'd expect.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJysU8Fu2zgQ_RrqMjBBjSzLOuiQ2OtFgD0sdoNeBYocS2woUSApO_n7graTtEWTXioIJMHhzHuDeU-GYPqJqGHlPSv3mVzi4HwzSzuSX2nZdWRj1jn90jwOJoCSI8EygwwwSx_BHUFCb02nYJZRDeDpZOgMrNgNMc6BFXcMDwwPZurcMw9u8YrO0hN3vmd4SJkraedBMjxsq_NojprGwI_hyNZiNJprmqjjNL04rinVKv7i8I9zTwGseSKIiRbbCE-9CZE8cM6hbWUY2xYYbhlinBkiw5ptBISXKcpnMGFiWEU4O_9kph7MBMrKqedM7Jm4u60b8f5fbk7OaGB4i7dtHDxJ3c7OTAma4Ta9SFDXAtX99QAAb_xea7RtnD8iWnyfFxc_QXr9ds2q_UcMr2tPE3kZKcDn_fzcwYVGnYb2Cn_5PMXP8f7e7eAN849AjqfrLgXDXZxvwd8SOQ9GDWACxIEguKtC45BG_MCw0kDPM6nIM90Uui5qmVGTV1jn9VYIzIZGHHNVqALLGnO93lR5UVbHri6rblshHevMNChwnYu8QrHerJHnsiyLbqtQqw1225KtBY3SWG7taUwyz0wICzV5jlVVZFZ2ZMPFb4gTneESTXMv95lvUtKqW_rA1sKaEMN7mWiipea_h_93qy-suHtX1K9FBNrRTeVSKQoBHv_NFm-bH43ZmzgsHVduTHa0p9dtNXv3lVRM3k0MA8PDrYVTg98CAAD__y6zOiA">