title: Are pointers with the MSB set (i.e.holding negative values) always invalid under Win64?
body: <p>I'm rewriting some fast string functions.<br>
  The goal of this exercise is to eliminate jumps so as to avoid misprediction.<br>
  This code only runs in user space.  </p>
  
  <p>Do Win64 pointers always evaluate to a positive Int64 value?</p>
  
  <pre><code>function BothValid(a,b: pointer): boolean;
  // a= rcx
  // b= rdx
  asm
    lea    rax, [rcx-4]
    lea    r8,  [rdx-4]
    or     r8,  rax
    js @OneOrMoreNullPointers 
    ....       
  </code></pre>
  
  <p><strong>Is the above way of testing for null pointers always valid?</strong>  </p>