aboutsummaryrefslogtreecommitdiff
path: root/src/codegen
diff options
context:
space:
mode:
authorJacob Young <jacobly0@users.noreply.github.com>2022-11-01 04:54:58 -0400
committerJacob Young <jacobly0@users.noreply.github.com>2022-11-01 20:39:06 -0400
commit4d594090b13629cb940bc400750b044473d26b11 (patch)
tree2dea81eba8fed0c067b409daf94f196cb862483a /src/codegen
parent09763435a85a6108cc4624b51ac1b016746078b6 (diff)
downloadzig-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.zig11
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);