From 4d594090b13629cb940bc400750b044473d26b11 Mon Sep 17 00:00:00 2001 From: Jacob Young Date: Tue, 1 Nov 2022 04:54:58 -0400 Subject: cbe: incorrectly implement volatile memset This will have to be replaced with manual volatile stores. --- src/codegen/c.zig | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'src/codegen') diff --git a/src/codegen/c.zig b/src/codegen/c.zig index 645d2b996c..cadedfab9e 100644 --- a/src/codegen/c.zig +++ b/src/codegen/c.zig @@ -4926,12 +4926,23 @@ fn airAtomicStore(f: *Function, inst: Air.Inst.Index, order: [*:0]const u8) !CVa fn airMemset(f: *Function, inst: Air.Inst.Index) !CValue { const pl_op = f.air.instructions.items(.data)[inst].pl_op; const extra = f.air.extraData(Air.Bin, pl_op.payload).data; + const dest_ty = f.air.typeOf(pl_op.operand); const dest_ptr = try f.resolveInst(pl_op.operand); const value = try f.resolveInst(extra.lhs); const len = try f.resolveInst(extra.rhs); const writer = f.object.writer(); try writer.writeAll("memset("); + if (dest_ty.isVolatilePtr()) { + // This is wrong, but good enough for now. + var remove_volatile_pl = dest_ty.ptrInfo(); + remove_volatile_pl.data.@"volatile" = false; + const remove_volatile_ty = Type.initPayload(&remove_volatile_pl.base); + + try writer.writeByte('('); + try f.renderTypecast(writer, remove_volatile_ty); + try writer.writeByte(')'); + } try f.writeCValue(writer, dest_ptr, .FunctionArgument); try writer.writeAll(", "); try f.writeCValue(writer, value, .FunctionArgument); -- cgit v1.2.3