title: Getting the high part of 64 bit integer multiplication
body: <p>In C++, say that:</p>
  
  <pre><code>uint64_t i;
  uint64_t j;
  </code></pre>
  
  <p>then <code>i * j</code> will yield an <code>uint64_t</code> that has as value the lower part of the multiplication between <code>i</code> and <code>j</code>, i.e., <code>(i * j) mod 2^64</code>.
  Now, what if I wanted the higher part of the multiplication? I know that there exists an assembly instruction do to something like that when using 32 bit integers, but I am not familiar at all with assembly, so I was hoping for help.</p>
  
  <p>What is the most efficient way to make something like:</p>
  
  <pre><code>uint64_t k = mulhi(i, j);
  </code></pre>