<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">