aboutsummaryrefslogtreecommitdiff
path: root/src/codegen
diff options
context:
space:
mode:
authorVeikka Tuominen <git@vexu.eu>2022-11-28 13:49:51 +0200
committerVeikka Tuominen <git@vexu.eu>2022-11-30 15:14:34 +0200
commit7be6f352e395b1fdc5cc7c3c91067cf4e473d753 (patch)
treef16ee7be28e0a469e96a2083acb957035316c8c7 /src/codegen
parent3281494dc50055dde0415cefb7dec806437741cc (diff)
downloadzig-7be6f352e395b1fdc5cc7c3c91067cf4e473d753.tar.gz
zig-7be6f352e395b1fdc5cc7c3c91067cf4e473d753.zip
cbe: fix asm return values
Diffstat (limited to 'src/codegen')
-rw-r--r--src/codegen/c.zig6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/codegen/c.zig b/src/codegen/c.zig
index 13ff4e7344..6df3893cbe 100644
--- a/src/codegen/c.zig
+++ b/src/codegen/c.zig
@@ -4108,6 +4108,8 @@ fn airAsm(f: *Function, inst: Air.Inst.Index) !CValue {
if (is_reg) {
try f.writeCValue(writer, .{ .local = locals_index }, .Other);
locals_index += 1;
+ } else if (output == .none) {
+ try f.writeCValue(writer, local, .FunctionArgument);
} else {
try f.writeCValueDeref(writer, try f.resolveInst(output));
}
@@ -4411,6 +4413,10 @@ fn structFieldPtr(f: *Function, inst: Air.Inst.Index, struct_ptr_ty: Type, struc
u8_ptr_pl.data.pointee_type = Type.u8;
const u8_ptr_ty = Type.initPayload(&u8_ptr_pl.base);
+ if (!std.mem.isAligned(byte_offset, field_ptr_ty.ptrAlignment(target))) {
+ return f.fail("TODO: CBE: unaligned packed struct field pointer", .{});
+ }
+
try writer.writeAll("&((");
try f.renderTypecast(writer, u8_ptr_ty);
try writer.writeByte(')');