compiler_rt/atomics: be consistent with const value

This commit is contained in:
daurnimator 2020-04-05 14:08:25 +10:00
parent f947444362
commit e9e43ed0d3
No known key found for this signature in database
GPG Key ID: 45B429A8F9D9D22A

View File

@ -154,7 +154,7 @@ fn atomicExchangeFn(comptime T: type) fn (*T, T, i32) callconv(.C) T {
if (@sizeOf(T) > largest_atomic_size) {
var sl = spinlocks.get(@ptrToInt(ptr));
defer sl.release();
var value = ptr.*;
const value = ptr.*;
ptr.* = val;
return value;
} else {
@ -177,11 +177,12 @@ fn atomicCompareExchangeFn(comptime T: type) fn (*T, *T, T, i32, i32) callconv(.
if (@sizeOf(T) > largest_atomic_size) {
var sl = spinlocks.get(@ptrToInt(ptr));
defer sl.release();
if (ptr.* == expected.*) {
const value = ptr.*;
if (value == expected.*) {
ptr.* = desired;
return 1;
}
expected.* = ptr.*;
expected.* = value;
return 0;
} else {
if (@cmpxchgStrong(T, ptr, expected.*, desired, .SeqCst, .SeqCst)) |old_value| {
@ -208,14 +209,14 @@ fn fetchFn(comptime T: type, comptime op: builtin.AtomicRmwOp) fn (*T, T, i32) c
var sl = spinlocks.get(@ptrToInt(ptr));
defer sl.release();
var value = ptr.*;
const value = ptr.*;
ptr.* = switch (op) {
.Add => ptr.* +% val,
.Sub => ptr.* -% val,
.And => ptr.* & val,
.Nand => ~(ptr.* & val),
.Or => ptr.* | val,
.Xor => ptr.* ^ val,
.Add => value +% val,
.Sub => value -% val,
.And => value & val,
.Nand => ~(value & val),
.Or => value | val,
.Xor => value ^ val,
else => @compileError("unsupported atomic op"),
};