diff options
| author | Jacob Young <jacobly0@users.noreply.github.com> | 2022-11-01 04:54:58 -0400 |
|---|---|---|
| committer | Jacob Young <jacobly0@users.noreply.github.com> | 2022-11-01 20:39:06 -0400 |
| commit | 4d594090b13629cb940bc400750b044473d26b11 (patch) | |
| tree | 2dea81eba8fed0c067b409daf94f196cb862483a /src/codegen | |
| parent | 09763435a85a6108cc4624b51ac1b016746078b6 (diff) | |
| download | zig-4d594090b13629cb940bc400750b044473d26b11.tar.gz zig-4d594090b13629cb940bc400750b044473d26b11.zip | |
cbe: incorrectly implement volatile memset
This will have to be replaced with manual volatile stores.
Diffstat (limited to 'src/codegen')
| -rw-r--r-- | src/codegen/c.zig | 11 |
1 files changed, 11 insertions, 0 deletions
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); |
