authorgravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2024-11-01 04:04:31+01:00
committergravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2025-05-12 17:07:49+02:00
log61ae9a2f4547ec2fd0024e79addfa2d38b4c1239
tree46045337b2d5ba51e45b2280bfaf05dfb97c23a9
parente40de8608273d50afe4c2d278c34be142af57562
signaturebadge-check Signed by SSH key SHA256:7B/LJ7bpR1eX8aCXSr4mtd5M45VMPKcx9zY8e95b5QM

riscv64: Add missing fence for seq_cst atomic_store.


1 files changed, 12 insertions(+), 1 deletions(-)

src/arch/riscv64/CodeGen.zig+12-1
...@@ -7729,7 +7729,7 @@ fn airAtomicLoad(func: *Func, inst: Air.Inst.Index) !void {...@@ -7729,7 +7729,7 @@ fn airAtomicLoad(func: *Func, inst: Air.Inst.Index) !void {
7729 const ptr_mcv = try func.resolveInst(atomic_load.ptr);7729 const ptr_mcv = try func.resolveInst(atomic_load.ptr);
77307730
7731 const bit_size = elem_ty.bitSize(zcu);7731 const bit_size = elem_ty.bitSize(zcu);
7732 if (bit_size > 64) return func.fail("TODO: airAtomicStore > 64 bits", .{});7732 if (bit_size > 64) return func.fail("TODO: airAtomicLoad > 64 bits", .{});
77337733
7734 const result_mcv = try func.allocRegOrMem(elem_ty, inst, true);7734 const result_mcv = try func.allocRegOrMem(elem_ty, inst, true);
7735 assert(result_mcv == .register); // should be less than 8 bytes7735 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...@@ -7793,6 +7793,17 @@ fn airAtomicStore(func: *Func, inst: Air.Inst.Index, order: std.builtin.AtomicOr
7793 }7793 }
77947794
7795 try func.store(ptr_mcv, val_mcv, ptr_ty);7795 try func.store(ptr_mcv, val_mcv, ptr_ty);
7796
7797 if (order == .seq_cst) {
7798 _ = try func.addInst(.{
7799 .tag = .fence,
7800 .data = .{ .fence = .{
7801 .pred = .rw,
7802 .succ = .rw,
7803 } },
7804 });
7805 }
7806
7796 return func.finishAir(inst, .unreach, .{ bin_op.lhs, bin_op.rhs, .none });7807 return func.finishAir(inst, .unreach, .{ bin_op.lhs, bin_op.rhs, .none });
7797}7808}
77987809