aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJacob Young <jacobly0@users.noreply.github.com>2023-12-03 23:07:03 -0500
committerJacob Young <jacobly0@users.noreply.github.com>2023-12-03 23:07:50 -0500
commit485e20884cfe7b6597e6d7c615195bb263d38abb (patch)
tree307ccc180e4c3d6c4a791fc4622116843f8beb9b /src
parent0be7c23f111eeda5ed65c065ad65a6febd12f20c (diff)
downloadzig-485e20884cfe7b6597e6d7c615195bb263d38abb.tar.gz
zig-485e20884cfe7b6597e6d7c615195bb263d38abb.zip
x86_64: implement movement for pointer vectors
Diffstat (limited to 'src')
-rw-r--r--src/arch/x86_64/CodeGen.zig18
1 files changed, 18 insertions, 0 deletions
diff --git a/src/arch/x86_64/CodeGen.zig b/src/arch/x86_64/CodeGen.zig
index 2eb45203d3..0e960cebeb 100644
--- a/src/arch/x86_64/CodeGen.zig
+++ b/src/arch/x86_64/CodeGen.zig
@@ -13046,6 +13046,24 @@ fn moveStrategy(self: *Self, ty: Type, class: Register.Class, aligned: bool) !Mo
},
else => {},
},
+ .Pointer, .Optional => if (ty.childType(mod).isPtrAtRuntime(mod))
+ switch (ty.vectorLen(mod)) {
+ 1 => return .{ .move = if (self.hasFeature(.avx))
+ .{ .v_q, .mov }
+ else
+ .{ ._q, .mov } },
+ 2 => return .{ .move = if (self.hasFeature(.avx))
+ if (aligned) .{ .v_, .movdqa } else .{ .v_, .movdqu }
+ else if (aligned) .{ ._, .movdqa } else .{ ._, .movdqu } },
+ 3...4 => if (self.hasFeature(.avx))
+ return .{ .move = if (aligned)
+ .{ .v_, .movdqa }
+ else
+ .{ .v_, .movdqu } },
+ else => {},
+ }
+ else
+ unreachable,
.Float => switch (ty.childType(mod).floatBits(self.target.*)) {
16 => switch (ty.vectorLen(mod)) {
1 => return if (self.hasFeature(.avx)) .{ .vex_insert_extract = .{