title: Difference between MSVC builtin macros _M_AMD64 and _M_X64
body: <p>I was looking at the MSVC docs for builtin macros and saw the following macros:</p>
  <blockquote>
  <p>_M_AMD64 Defined as the integer literal value 100 for compilations that target x64 processors. Otherwise, undefined.</p>
  <p>_M_X64 Defined as the integer literal value 100 for compilations that target x64 processors. Otherwise, undefined.</p>
  </blockquote>
  <p>Also, there is the following macro that seems to do the same?</p>
  <blockquote>
  <p>_WIN64 Defined as 1 when the compilation target is 64-bit ARM or x64. Otherwise, undefined.</p>
  </blockquote>
  <p>They both have exactly the same definition according to the docs - are they equivalent? Are there any situations where one will be defined whilst the other isn't? If not, what's the history here?</p>