<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Tue, Feb 11, 2014 at 12:28 AM, Richard Osborne <span dir="ltr"><<a href="mailto:richard@xmos.com" target="_blank">richard@xmos.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div class=""><br>
On 11 Feb 2014, at 08:15, Eric Christopher <<a href="mailto:echristo@gmail.com">echristo@gmail.com</a>> wrote:<br>
<br>
> On Mon, Feb 10, 2014 at 11:51 PM, Reid Kleckner <<a href="mailto:rnk@google.com">rnk@google.com</a>> wrote:<br>
>><br>
>><br>
>><br>
</div><div class="">>> IIRC this came up before, and I don't think we expose anything like a jump<br>
>> table at the IR level.  As an IR-to-IR transform, I think asm is the only<br>
>> way to do it.<br>
><br>
> I'd have to look more at what he's doing, but wouldn't a simple switch<br>
> statement in IR suffice? Efficiency would be up to the various<br>
> lowering mechanisms, but it wouldn't require inline asm.<br>
><br>
> -eric<br>
</div>Another option might be to create an array of function pointers in the LLVM IR, i.e generate code that looks like:<br>
<br>
void (*jumptable[])() = {<br>
  &a,<br>
  &b<br>
};<br>
<br>
void f(int index) {<br>
  *(jumptable[index])();<br>
}<br></blockquote><div><br></div><div>This isn't ABI compatible.  Now function pointers point to data (or are switch table indices) and not code.</div><div><br></div><div>I can imagine abusing indirectbr across separate functions, but rolling your own jump table in asm seems better.</div>
<div><br></div>On Tue, Feb 11, 2014 at 5:07 AM, Joerg Sonnenberger <span dir="ltr"><<a href="mailto:joerg@britannica.bec.de" target="_blank">joerg@britannica.bec.de</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<div class="">On Mon, Feb 10, 2014 at 03:33:32PM -0800, Tom Roeder wrote:<br>>     3. adds a fast check for pointer safety at each indirect call site:<br><br></div>Why not using a bloom filter for valid target addresses instead?<br>
</blockquote><div><br></div><div>Can a bloom filter be as fast as a simple bounds check?  I'm thinking lea base, sub, cmp, jl, and cold call.</div></div></div></div>