<div dir="ltr"><br><div class="gmail_extra"><br><br><div class="gmail_quote">On Sat, Mar 29, 2014 at 1:30 AM, Renato Golin <span dir="ltr"><<a href="mailto:renato.golin@linaro.org" target="_blank">renato.golin@linaro.org</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Folks,<br>
<br>
So, I think we kind of agree that some named registers could be<br>
implemented, and that it should be an intrinsic that passes the name<br>
of the register down.<br>
<br>
This C code:<br>
<br>
register unsigned long current_stack_pointer asm("sp");<br>
unsigned long get_stack_pointer_addr() {<br>
  return current_stack_pointer;<br>
}<br>
void set_stack_pointer_addr(unsigned long addr) {<br>
  current_stack_pointer = addr;<br>
}<br>
<br>
Would become something like:<br>
<br>
define i32 @get_stack_pointer_addr() nounwind {<br>
entry:<br>
  %0 = call i32 @llvm.read_register("sp")<br>
  ret i32 %0<br>
}<br>
<br>
define void @set_stack_pointer_addr(i32 %addr) nounwind {<br>
entry:<br>
  call void @llvm.write_register("sp", %addr)<br>
  ret void<br>
}<br>
<br></blockquote></div><br></div><div class="gmail_extra">Should that be something like;<br><br><pre>declare void @llvm.write_register.sp(i32 val)<br>declare i32 @llvm.read_register.sp()</pre>define i32 @get_stack_pointer_addr() nounwind {<br>

entry:<br>
  %0 = call i32 @llvm.read_register.sp()<br>
  ret i32 %0<br>
}<br>
<br>
define void @set_stack_pointer_addr(i32 %addr) nounwind {<br>
entry:<br>
  call void @llvm.write_register.sp(%addr)<br>
  ret void<br>
}<br><br></div><div class="gmail_extra">Then you don't need to clutter the IR with metadata or a constant i8* to identify the register.<br></div><div class="gmail_extra">There's precedent for overloading intrinsics.<br>

</div></div>