<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/136428>136428</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            Clang uses wrong ABI for __atomic_store_16 on Windows
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            clang
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          Alcaro
      </td>
    </tr>
</table>

<pre>
    ```c++
unsigned __int128 g;
extern "C" void k(unsigned __int128* a, unsigned __int128 b, int c);
extern "C" void r()
{
    k(&g, 1234, 5);
}
extern "C" void p()
{
    __atomic_store_n(&g, 1234, __ATOMIC_SEQ_CST);
}
```
Expected: Pass the int128 by reference, and place __ATOMIC_SEQ_CST=5 in r8d, for both calls, like GCC.

Actual: Clang calls __atomic_store_16 by passing the int128 by value in r8:rdx, and the 5 goes in r9d. https://godbolt.org/z/49Gzso4ax

Originally reported at https://github.com/brechtsanders/winlibs_mingw/issues/256
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJx8k01v4zgMhn8NfREmsOmv-OCDm04GPSy6ixbYo6EPxtFWkQJJTtL--oWStrtI2gEMCBDJ531JWjwEPVmiHuo7qO8zPset8_1gJPcuE0699tDkl08C3qUvH2Z7rlJsHLWNBS7ZBGUK0CmStwwQV4DIDk4r9gK4vCkAHBgHXLFblEjX2kYmAbvvsR4SpYN8gDblMMbOUoDNlAgFllU6608KtPffsPZfsMaRR7fTcgzReRrtF-hxHJ4f_3hYjU8__xpXT89XSp-Dg3z4edqTjKSgHNifPAQWt8Q-Gn5lnjbkyUpKWG4V2xsu6VagvK-ZtswvVUrcOM-Ei1smuTEh3Rj9QuzXarVI8vkwyDhzkzRXhtvpknfdWdEkB_v0J9jpyteBm5kuilAOXp0-_KW0mk2OwjnaqQXbxrgPUA6Aa8D15JRwJi6cnwDXb4Drqvv1FlzFTxdvj15P2nJjUvd75yMpxuM1RcftLBbS7QDXwpPcxsCtIh8A10dtjRZh3Gk7HQHXOoSZUgDrJlN9qbqy4xn1RVvVedPWdZtt-7wuOmrrHCtslyIXUlAhlkVNhWjalpaZ7jHHOq-KrsC6K9pFV5JEThtR1app5AaqnHZcm4Uxh13qLzsL90XZVLjMDBdkwvk9Ico0dkBMT8v3qeCHmKcAVW50iOE_RNTRUH_Z0hwosKN3dmLD3cN5y7crc5b9ra1yx5DN3vS_GVvSeD9-7L37h2T8_7DebR96_DcAAP__Xuc8Ug">