On Thursday 25 September 2025 11:14:36 LIU Hao wrote:
> 在 2025-9-24 21:55, Pali Rohár 写道:
> > Without including windows.h it is possible to do declare
> > InterlockedExchange and call it. See: https://godbolt.org/z/78qKcMKox
> > 
> > long __stdcall InterlockedExchange(volatile long*, long);
> > long test(volatile long* arg1, long arg2) { return 
> > InterlockedExchange(arg1, arg2); }
> > 
> > 
> > And it is possible also with windows.h by undefining macro
> > InterlockedExchange. See: https://godbolt.org/z/bKboTEoYT
> > 
> > #include <windows.h>
> > #undef InterlockedExchange
> > LONG WINAPI InterlockedExchange(volatile LONG*, LONG);
> > LONG test(volatile LONG* arg1, LONG arg2) { return 
> > InterlockedExchange(arg1, arg2); }
> > 
> 
> No, don't do that. It will cause a linker error on x86-64 and ARM targets.

Sure, that is 32-bit x86 only code.

> 
> > > In addition, is there a reason to re-implement them, instead of removing 
> > > `DATA` from the DEF?
> > 
> > Well, I do not know. I saw that all intrinsics are defined in source
> > code instead of redirection to kernel32.dll implementation. So choose
> > same strategy, define in in the mingw-w64 source code.
> > 
> > I can imagine that LTO compilations (now or in future) could be able to
> > inline this call, but that is just a speculation.
> > 
> > Maybe one thing, which could be interested:
> > API of InterlockedIncrement and InterlockedDecrement in kernel32.dll was
> > changed in past, previously in past it returned only sign of the
> > original value, now it returns the full original value.
> 
> Those should be intrinsics and should never be imported, like GCC
> MMX/SSE/AVX intrinsics which are defined as `extern inline` with
> `gnu_inline` and `always_inline` but no external definitions actually exist.

The point is that ms for 32-bit x86 provides external symbol.
That is why I added it in this change just for this target.


_______________________________________________
Mingw-w64-public mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public

Reply via email to