authorgravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2023-12-03 23:07:03-05:00
committergravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2023-12-03 23:07:50-05:00
log485e20884cfe7b6597e6d7c615195bb263d38abb
tree307ccc180e4c3d6c4a791fc4622116843f8beb9b
parent0be7c23f111eeda5ed65c065ad65a6febd12f20c

x86_64: implement movement for pointer vectors


2 files changed, 18 insertions(+), 1 deletions(-)

src/arch/x86_64/CodeGen.zig+18
...@@ -13046,6 +13046,24 @@ fn moveStrategy(self: *Self, ty: Type, class: Register.Class, aligned: bool) !Mo...@@ -13046,6 +13046,24 @@ fn moveStrategy(self: *Self, ty: Type, class: Register.Class, aligned: bool) !Mo
13046 },13046 },
13047 else => {},13047 else => {},
13048 },13048 },
13049 .Pointer, .Optional => if (ty.childType(mod).isPtrAtRuntime(mod))
13050 switch (ty.vectorLen(mod)) {
13051 1 => return .{ .move = if (self.hasFeature(.avx))
13052 .{ .v_q, .mov }
13053 else
13054 .{ ._q, .mov } },
13055 2 => return .{ .move = if (self.hasFeature(.avx))
13056 if (aligned) .{ .v_, .movdqa } else .{ .v_, .movdqu }
13057 else if (aligned) .{ ._, .movdqa } else .{ ._, .movdqu } },
13058 3...4 => if (self.hasFeature(.avx))
13059 return .{ .move = if (aligned)
13060 .{ .v_, .movdqa }
13061 else
13062 .{ .v_, .movdqu } },
13063 else => {},
13064 }
13065 else
13066 unreachable,
13049 .Float => switch (ty.childType(mod).floatBits(self.target.*)) {13067 .Float => switch (ty.childType(mod).floatBits(self.target.*)) {
13050 16 => switch (ty.vectorLen(mod)) {13068 16 => switch (ty.vectorLen(mod)) {
13051 1 => return if (self.hasFeature(.avx)) .{ .vex_insert_extract = .{13069 1 => return if (self.hasFeature(.avx)) .{ .vex_insert_extract = .{
test/behavior/cast.zig-1
...@@ -2355,7 +2355,6 @@ test "@ptrFromInt on vector" {...@@ -2355,7 +2355,6 @@ test "@ptrFromInt on vector" {
23552355
2356test "@intFromPtr on vector" {2356test "@intFromPtr on vector" {
2357 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO2357 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
2358 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
2359 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO2358 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
2360 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO2359 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
2361 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO2360 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO