<div dir="auto">Thanks for your reply Sam,<div dir="auto">GCC rejects the builtin but clang crashes.</div><div dir="auto"><br></div><div dir="auto"><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Mar 25, 2020, 9:06 PM Sam Elliott <<a href="mailto:selliott@lowrisc.org">selliott@lowrisc.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi kamlesh,<br>
<br>
Does GCC provide such a builtin?<br>
<br>
At the moment, you can write inline assembly to access the `tp` register if you need to read it directly, like so (you can directly inline this if you need to):<br>
<br>
void* read_thread_pointer(void) {<br>
  void* thread_pointer;<br>
  asm("mov %0, tp" : "=r"(thread_pointer) : );<br>
  return thread_pointer;<br>
}<br>
<br>
I am not entirely sure how where `tp` points to in the different thread local models. There is more information on these models in the RISC-V ELF psABI document: <a href="https://github.com/riscv/riscv-elf-psabi-doc/blob/master/riscv-elf.md#thread-local-storage" rel="noreferrer noreferrer" target="_blank">https://github.com/riscv/riscv-elf-psabi-doc/blob/master/riscv-elf.md#thread-local-storage</a><br>
<br>
Sam<br>
<br>
> On 25 Mar 2020, at 12:34 pm, kamlesh kumar via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org" target="_blank" rel="noreferrer">llvm-dev@lists.llvm.org</a>> wrote:<br>
> <br>
> Hi Devs,<br>
> since risc-v has a register $tp which is thread pointer.<br>
> is it possible to have __builtin_thread_pointer for RISC-V?<br>
> I am not sure what could be corresponding instructions?<br>
> <br>
> ./kamlesh<br>
> _______________________________________________<br>
> LLVM Developers mailing list<br>
> <a href="mailto:llvm-dev@lists.llvm.org" target="_blank" rel="noreferrer">llvm-dev@lists.llvm.org</a><br>
> <a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br>
<br>
--<br>
Sam Elliott<br>
Software Developer - LLVM and OpenTitan<br>
lowRISC CIC<br>
<br>
</blockquote></div>