So, trying to hunt an strange issue with Windows scons builds of 
filebrowser work, I found that our attomic operations (defined in 
intern/atomic/atomci_ops.h) do not return the same things on MSVC than 
with other OS/compilers.

With GCC & co we use `__sync_add_and_fetch`, on OSX, `OSAtomicAdd64`, 
with MSVC `InterlockedExchangeAdd64`, and have a fallback implementation 
in plain assembler.

According to documentations (and my limited asm understanding), MSVC 
version returns the value of `*p` *before* the operation, while all 
others return it *after* the operation (i.e. return the result of the 
operation).

https://gcc.gnu.org/onlinedocs/gcc-5.1.0/gcc/_005f_005fsync-Builtins.html
https://msdn.microsoft.com/en-us/library/windows/desktop/ms683599(v=vs.85).aspx
https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man3/OSAtomicAdd64.3.html

I doubt this is desired behavior, and think it could easily generate 
nasty bug some day… MSVC does not seem to have a 'return value after 
operation' variant from quick look at the doc? Maybe we should just 
remove the MSVC case completely and use asm version instead?

Bastien
_______________________________________________
Bf-committers mailing list
Bf-committers@blender.org
http://lists.blender.org/mailman/listinfo/bf-committers

Reply via email to