aboutsummaryrefslogtreecommitdiff
path: root/src/arch/x86_64/CodeGen.zig
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2022-03-26 00:33:22 -0400
committerGitHub <noreply@github.com>2022-03-26 00:33:22 -0400
commit88e98a0611b9fb41c1da026febac2467548bb129 (patch)
tree038ccb88c632580be1898a536aa2433077c2e6d0 /src/arch/x86_64/CodeGen.zig
parentbae35bdf2d8919b60dee9a0af3afbdd93dd72b59 (diff)
parentcd46daf7d047eeceb7690e2739af5952d60c3884 (diff)
downloadzig-88e98a0611b9fb41c1da026febac2467548bb129.tar.gz
zig-88e98a0611b9fb41c1da026febac2467548bb129.zip
Merge pull request #11289 from schmee/stage2-select
stage2: implement `@select`
Diffstat (limited to 'src/arch/x86_64/CodeGen.zig')
-rw-r--r--src/arch/x86_64/CodeGen.zig8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/arch/x86_64/CodeGen.zig b/src/arch/x86_64/CodeGen.zig
index 17a113bc81..5b252b6c0a 100644
--- a/src/arch/x86_64/CodeGen.zig
+++ b/src/arch/x86_64/CodeGen.zig
@@ -714,6 +714,7 @@ fn genBody(self: *Self, body: []const Air.Inst.Index) InnerError!void {
.tag_name => try self.airTagName(inst),
.error_name => try self.airErrorName(inst),
.splat => try self.airSplat(inst),
+ .select => try self.airSelect(inst),
.shuffle => try self.airShuffle(inst),
.reduce => try self.airReduce(inst),
.aggregate_init => try self.airAggregateInit(inst),
@@ -5624,6 +5625,13 @@ fn airSplat(self: *Self, inst: Air.Inst.Index) !void {
return self.finishAir(inst, result, .{ ty_op.operand, .none, .none });
}
+fn airSelect(self: *Self, inst: Air.Inst.Index) !void {
+ const pl_op = self.air.instructions.items(.data)[inst].pl_op;
+ const extra = self.air.extraData(Air.Bin, pl_op.payload).data;
+ const result: MCValue = if (self.liveness.isUnused(inst)) .dead else return self.fail("TODO implement airSelect for x86_64", .{});
+ return self.finishAir(inst, result, .{ pl_op.operand, extra.lhs, extra.rhs });
+}
+
fn airShuffle(self: *Self, inst: Air.Inst.Index) !void {
const ty_op = self.air.instructions.items(.data)[inst].ty_op;
const result: MCValue = if (self.liveness.isUnused(inst)) .dead else return self.fail("TODO implement airShuffle for x86_64", .{});