title: Why does Windows64 use a different calling convention from all other OSes on x86-64?
body: <p>AMD has an ABI specification that describes the calling convention to use on x86-64. All OSes follow it, except for Windows which has it's own x86-64 calling convention. Why?</p>
  
  <p>Does anyone know the technical, historical, or political reasons for this difference, or is it purely a matter of NIHsyndrome? </p>
  
  <p>I understand that different OSes may have different needs for higher level things, but that doesn't explain why for example the register parameter passing order on Windows is <code>rcx - rdx - r8 - r9 - rest on stack</code> while everyone else uses <code>rdi - rsi - rdx - rcx - r8 - r9 - rest on stack</code>. </p>
  
  <p>P.S. I am aware of <em>how</em> these calling conventions differ generally and I know where to find details if I need to. What I want to know is <em>why</em>. </p>
  
  <p>Edit: for the how, see e.g. the <a href="http://en.wikipedia.org/wiki/X86_calling_conventions#x86-64_Calling_Conventions" rel="noreferrer">wikipedia entry</a> and links from there. </p>