diff options
| author | Veikka Tuominen <git@vexu.eu> | 2022-03-31 00:38:19 +0300 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2022-03-31 01:33:28 -0400 |
| commit | 75c2cff40ef5c758ec18455324a50378684aff85 (patch) | |
| tree | dbad1cafdd53fcab11e9be52aa27702b9bbb1345 /src/Sema.zig | |
| parent | 6655c6092efbdc8b1aeb89ff9f7a8b05f736916a (diff) | |
| download | zig-75c2cff40ef5c758ec18455324a50378684aff85.tar.gz zig-75c2cff40ef5c758ec18455324a50378684aff85.zip | |
stage2: handle assembly input names
Diffstat (limited to 'src/Sema.zig')
| -rw-r--r-- | src/Sema.zig | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/src/Sema.zig b/src/Sema.zig index 112939c995..9f5d6d5f9e 100644 --- a/src/Sema.zig +++ b/src/Sema.zig @@ -10295,15 +10295,12 @@ fn zirAsm( }; const args = try sema.arena.alloc(Air.Inst.Ref, inputs_len); - const inputs = try sema.arena.alloc([]const u8, inputs_len); + const inputs = try sema.arena.alloc(struct { c: []const u8, n: []const u8 }, inputs_len); for (args) |*arg, arg_i| { const input = sema.code.extraData(Zir.Inst.Asm.Input, extra_i); extra_i = input.end; - const name = sema.code.nullTerminatedString(input.data.name); - _ = name; // TODO: use the name - const uncasted_arg = sema.resolveInst(input.data.operand); const uncasted_arg_ty = sema.typeOf(uncasted_arg); switch (uncasted_arg_ty.zigTypeTag()) { @@ -10313,8 +10310,9 @@ fn zirAsm( } const constraint = sema.code.nullTerminatedString(input.data.constraint); - needed_capacity += constraint.len / 4 + 1; - inputs[arg_i] = constraint; + const name = sema.code.nullTerminatedString(input.data.name); + needed_capacity += (constraint.len + name.len + 1) / 4 + 1; + inputs[arg_i] = .{ .c = constraint, .n = name }; } const clobbers = try sema.arena.alloc([]const u8, clobbers_len); @@ -10353,11 +10351,13 @@ fn zirAsm( buffer[o.constraint.len] = 0; sema.air_extra.items.len += o.constraint.len / 4 + 1; } - for (inputs) |constraint| { + for (inputs) |input| { const buffer = mem.sliceAsBytes(sema.air_extra.unusedCapacitySlice()); - mem.copy(u8, buffer, constraint); - buffer[constraint.len] = 0; - sema.air_extra.items.len += constraint.len / 4 + 1; + mem.copy(u8, buffer, input.c); + buffer[input.c.len] = 0; + mem.copy(u8, buffer[input.c.len + 1 ..], input.n); + buffer[input.c.len + 1 + input.n.len] = 0; + sema.air_extra.items.len += (input.c.len + input.n.len + 1) / 4 + 1; } for (clobbers) |clobber| { const buffer = mem.sliceAsBytes(sema.air_extra.unusedCapacitySlice()); |
