<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">