aboutsummaryrefslogtreecommitdiff
path: root/src/arch/aarch64/CodeGen.zig
diff options
context:
space:
mode:
authorjoachimschmidt557 <joachim.schmidt557@outlook.com>2021-11-07 17:57:21 +0100
committerjoachimschmidt557 <joachim.schmidt557@outlook.com>2021-11-10 19:48:16 +0100
commita5a012e8599e57da3e80ff770f9de492037e4f4a (patch)
tree86fb5332cb15054858b25900829344678d901e69 /src/arch/aarch64/CodeGen.zig
parent8cb00519cddadae8728d2b2e51a36da71d5bfe67 (diff)
downloadzig-a5a012e8599e57da3e80ff770f9de492037e4f4a.tar.gz
zig-a5a012e8599e57da3e80ff770f9de492037e4f4a.zip
stage2 AArch64: implement genSetReg for condition flags
Diffstat (limited to 'src/arch/aarch64/CodeGen.zig')
-rw-r--r--src/arch/aarch64/CodeGen.zig19
1 files changed, 19 insertions, 0 deletions
diff --git a/src/arch/aarch64/CodeGen.zig b/src/arch/aarch64/CodeGen.zig
index 4d56e592ef..dba0c86552 100644
--- a/src/arch/aarch64/CodeGen.zig
+++ b/src/arch/aarch64/CodeGen.zig
@@ -2182,6 +2182,25 @@ fn genSetReg(self: *Self, ty: Type, reg: Register, mcv: MCValue) InnerError!void
else => unreachable, // unexpected register size
}
},
+ .compare_flags_unsigned,
+ .compare_flags_signed,
+ => |op| {
+ const condition = switch (mcv) {
+ .compare_flags_unsigned => Instruction.Condition.fromCompareOperatorUnsigned(op),
+ .compare_flags_signed => Instruction.Condition.fromCompareOperatorSigned(op),
+ else => unreachable,
+ };
+
+ _ = try self.addInst(.{
+ .tag = .cset,
+ .data = .{ .rrr_cond = .{
+ .rd = reg,
+ .rn = .xzr,
+ .rm = .xzr,
+ .cond = condition,
+ } },
+ });
+ },
.immediate => |x| {
_ = try self.addInst(.{
.tag = .movz,