diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2021-09-15 12:37:32 -0700 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2021-09-15 12:37:32 -0700 |
| commit | 19691c0b174f283ffe5b6c3fe8533ef458736064 (patch) | |
| tree | 802390ce8ad5d29cc72450262efd4b13140f5f20 /src/codegen/c.zig | |
| parent | e5fd45003e56f152364a4bdc609fda07a6b524fd (diff) | |
| download | zig-19691c0b174f283ffe5b6c3fe8533ef458736064.tar.gz zig-19691c0b174f283ffe5b6c3fe8533ef458736064.zip | |
stage2: implement `@fence`
Diffstat (limited to 'src/codegen/c.zig')
| -rw-r--r-- | src/codegen/c.zig | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/src/codegen/c.zig b/src/codegen/c.zig index ff49b18f7b..a2e2d7b20d 100644 --- a/src/codegen/c.zig +++ b/src/codegen/c.zig @@ -842,6 +842,7 @@ fn genBody(o: *Object, body: []const Air.Inst.Index) error{ AnalysisFail, OutOfM .breakpoint => try airBreakpoint(o), .unreach => try airUnreach(o), + .fence => try airFence(o, inst), // TODO use a different strategy for add that communicates to the optimizer // that wrapping is UB. @@ -1439,6 +1440,17 @@ fn airBreakpoint(o: *Object) !CValue { return CValue.none; } +fn airFence(o: *Object, inst: Air.Inst.Index) !CValue { + const atomic_order = o.air.instructions.items(.data)[inst].fence; + const writer = o.writer(); + + try writer.writeAll("zig_fence("); + try writeMemoryOrder(writer, atomic_order); + try writer.writeAll(");\n"); + + return CValue.none; +} + fn airUnreach(o: *Object) !CValue { try o.writer().writeAll("zig_unreachable();\n"); return CValue.none; |
