mirror of
https://github.com/ziglang/zig.git
synced 2025-12-06 14:23:09 +00:00
riscv64: Add missing fence for seq_cst atomic_store.
This commit is contained in:
parent
e40de86082
commit
61ae9a2f45
@ -7729,7 +7729,7 @@ fn airAtomicLoad(func: *Func, inst: Air.Inst.Index) !void {
|
|||||||
const ptr_mcv = try func.resolveInst(atomic_load.ptr);
|
const ptr_mcv = try func.resolveInst(atomic_load.ptr);
|
||||||
|
|
||||||
const bit_size = elem_ty.bitSize(zcu);
|
const bit_size = elem_ty.bitSize(zcu);
|
||||||
if (bit_size > 64) return func.fail("TODO: airAtomicStore > 64 bits", .{});
|
if (bit_size > 64) return func.fail("TODO: airAtomicLoad > 64 bits", .{});
|
||||||
|
|
||||||
const result_mcv = try func.allocRegOrMem(elem_ty, inst, true);
|
const result_mcv = try func.allocRegOrMem(elem_ty, inst, true);
|
||||||
assert(result_mcv == .register); // should be less than 8 bytes
|
assert(result_mcv == .register); // should be less than 8 bytes
|
||||||
@ -7793,6 +7793,17 @@ fn airAtomicStore(func: *Func, inst: Air.Inst.Index, order: std.builtin.AtomicOr
|
|||||||
}
|
}
|
||||||
|
|
||||||
try func.store(ptr_mcv, val_mcv, ptr_ty);
|
try func.store(ptr_mcv, val_mcv, ptr_ty);
|
||||||
|
|
||||||
|
if (order == .seq_cst) {
|
||||||
|
_ = try func.addInst(.{
|
||||||
|
.tag = .fence,
|
||||||
|
.data = .{ .fence = .{
|
||||||
|
.pred = .rw,
|
||||||
|
.succ = .rw,
|
||||||
|
} },
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
return func.finishAir(inst, .unreach, .{ bin_op.lhs, bin_op.rhs, .none });
|
return func.finishAir(inst, .unreach, .{ bin_op.lhs, bin_op.rhs, .none });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user