@@ -404,7 +404,7 @@ void atomicFence() nothrow @nogc @safe
404
404
* Returns:
405
405
* The result of the operation.
406
406
*/
407
- TailShared ! T atomicOp (string op, T, V1 )(ref shared T val, V1 mod) pure nothrow @nogc @safe
407
+ T atomicOp (string op, T, V1 )(ref shared T val, V1 mod) pure nothrow @nogc @safe
408
408
if (__traits(compiles, mixin (" *cast(T*)&val" ~ op ~ " mod" )))
409
409
in (atomicValueIsProperlyAligned(val))
410
410
{
@@ -420,7 +420,7 @@ in (atomicValueIsProperlyAligned(val))
420
420
op == " ==" || op == " !=" || op == " <" || op == " <=" ||
421
421
op == " >" || op == " >=" )
422
422
{
423
- TailShared ! T get = atomicLoad! (MemoryOrder.raw)(val);
423
+ T get = atomicLoad! (MemoryOrder.raw, T )(val);
424
424
mixin (" return get " ~ op ~ " mod;" );
425
425
}
426
426
else
@@ -430,21 +430,20 @@ in (atomicValueIsProperlyAligned(val))
430
430
// |= ^= <<= >>= >>>= ~=
431
431
static if (op == " +=" && __traits(isIntegral, T) && __traits(isIntegral, V1 ) && T.sizeof <= size_t .sizeof && V1 .sizeof <= size_t .sizeof)
432
432
{
433
- return cast (T)(atomicFetchAdd! (MemoryOrder.seq, T) (val, mod) + mod);
433
+ return cast (T)(atomicFetchAdd(val, mod) + mod);
434
434
}
435
435
else static if (op == " -=" && __traits(isIntegral, T) && __traits(isIntegral, V1 ) && T.sizeof <= size_t .sizeof && V1 .sizeof <= size_t .sizeof)
436
436
{
437
- return cast (T)(atomicFetchSub! (MemoryOrder.seq, T) (val, mod) - mod);
437
+ return cast (T)(atomicFetchSub(val, mod) - mod);
438
438
}
439
439
else static if (op == " +=" || op == " -=" || op == " *=" || op == " /=" ||
440
440
op == " %=" || op == " ^^=" || op == " &=" || op == " |=" ||
441
441
op == " ^=" || op == " <<=" || op == " >>=" || op == " >>>=" ) // skip "~="
442
442
{
443
- TailShared! T get , set;
444
-
443
+ T set, get = atomicLoad! (MemoryOrder.raw, T)(val);
445
444
do
446
445
{
447
- get = set = atomicLoad ! (MemoryOrder.raw)(val) ;
446
+ set = get ;
448
447
mixin (" set " ~ op ~ " mod;" );
449
448
} while (! casByRef(val, get , set));
450
449
return set;
0 commit comments