<html><body><p><tt>John McCall via swift-dev &lt;swift-dev@swift.org&gt; wrote on 2016-03-01 06:23:24 PM:<br><br>&gt; &gt; On Mar 1, 2016, at 3:05 PM, Greg Parker via swift-dev &lt;swift-<br>&gt; dev@swift.org&gt; wrote:<br>&gt; &gt;&gt; On Mar 1, 2016, at 1:33 PM, Joe Groff via swift-dev &lt;swift-<br>&gt; dev@swift.org&gt; wrote:<br>&gt; &gt;&gt; <br>&gt; &gt;&gt; In swift_retain/release, we have an early-exit check to pass <br>&gt; through a nil pointer. Since we're already burning branch, I'm <br>&gt; thinking we could pass through not only zero but negative pointer <br>&gt; values too on 64-bit systems, since negative pointers are never <br>&gt; valid userspace pointers on our 64-bit targets. This would give us <br>&gt; room for tagged-pointer-like optimizations, for instance to avoid <br>&gt; allocations for tiny closure contexts.<br>&gt; &gt; <br>&gt; &gt; We can't do that unless we can get a guarantee from the OS folks <br>&gt; that a &quot;negative&quot; pointer will never be a valid userspace pointer in<br>&gt; any future OS version.<br>&gt; <br>&gt; We have that guarantee, actually. &nbsp;The top eight bits are guaranteed<br>&gt; to be clear in the user space on both ARM64 and x86-64.</tt><br><br><tt>This may be the case currently on Linux (even for non-x86 architectures),</tt><br><tt>but what I have heard is that the kernel architecture allows using more</tt><br><tt>levels of page tables, and the full 64-bit address space. The &quot;guarantee&quot;</tt><br><tt>may not hold true in the future.</tt><br><br><tt>Negative pointer values are also used on other operating systems, so I</tt><br><tt>would suggest not relying on this assumption for the sake of portability.</tt><br><br><tt>Bryan</tt><br><tt><br></tt><BR>
</body></html>