From 485e20884cfe7b6597e6d7c615195bb263d38abb Mon Sep 17 00:00:00 2001 From: Jacob Young Date: Sun, 3 Dec 2023 23:07:03 -0500 Subject: [PATCH] x86_64: implement movement for pointer vectors --- src/arch/x86_64/CodeGen.zig | 18 ++++++++++++++++++ test/behavior/cast.zig | 1 - 2 files changed, 18 insertions(+), 1 deletion(-) 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 = .{ diff --git a/test/behavior/cast.zig b/test/behavior/cast.zig index a61c4fb29a..1095f1c7eb 100644 --- a/test/behavior/cast.zig +++ b/test/behavior/cast.zig @@ -2355,7 +2355,6 @@ test "@ptrFromInt on vector" { test "@intFromPtr on vector" { if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO - if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO