diff options
| author | Jakub Konka <kubkon@jakubkonka.com> | 2022-11-07 12:05:05 +0100 |
|---|---|---|
| committer | Jakub Konka <kubkon@jakubkonka.com> | 2022-11-08 13:42:58 +0100 |
| commit | 35bd5363eed17270f1d3f96b8b1579126b12048a (patch) | |
| tree | 68f2805c014fe9c9591d1c0d9649755be22312bd /src | |
| parent | 0de56d1722a50435696d7bdc8900ca4206e12d70 (diff) | |
| download | zig-35bd5363eed17270f1d3f96b8b1579126b12048a.tar.gz zig-35bd5363eed17270f1d3f96b8b1579126b12048a.zip | |
aarch64: implement isNull() for non-pointer optionals
Diffstat (limited to 'src')
| -rw-r--r-- | src/arch/aarch64/CodeGen.zig | 7 |
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); } } |
