aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJakub Konka <kubkon@jakubkonka.com>2022-11-07 12:05:05 +0100
committerJakub Konka <kubkon@jakubkonka.com>2022-11-08 13:42:58 +0100
commit35bd5363eed17270f1d3f96b8b1579126b12048a (patch)
tree68f2805c014fe9c9591d1c0d9649755be22312bd /src
parent0de56d1722a50435696d7bdc8900ca4206e12d70 (diff)
downloadzig-35bd5363eed17270f1d3f96b8b1579126b12048a.tar.gz
zig-35bd5363eed17270f1d3f96b8b1579126b12048a.zip
aarch64: implement isNull() for non-pointer optionals
Diffstat (limited to 'src')
-rw-r--r--src/arch/aarch64/CodeGen.zig7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/arch/aarch64/CodeGen.zig b/src/arch/aarch64/CodeGen.zig
index d677d0659c..0f34f4bbc6 100644
--- a/src/arch/aarch64/CodeGen.zig
+++ b/src/arch/aarch64/CodeGen.zig
@@ -4601,7 +4601,12 @@ fn isNull(self: *Self, operand_bind: ReadArg.Bind, operand_ty: Type) !MCValue {
const imm_bind: ReadArg.Bind = .{ .mcv = .{ .immediate = 0 } };
return self.cmp(operand_bind, imm_bind, Type.usize, .eq);
} else {
- return self.fail("TODO implement non-pointer optionals", .{});
+ var buf: Type.Payload.ElemType = undefined;
+ const payload_ty = operand_ty.optionalChild(&buf);
+ const sentinel_ty = if (payload_ty.hasRuntimeBitsIgnoreComptime()) Type.bool else operand_ty;
+
+ const imm_bind: ReadArg.Bind = .{ .mcv = .{ .immediate = 0 } };
+ return self.cmp(operand_bind, imm_bind, sentinel_ty, .eq);
}
}