authorgravatar for robin@voetter.nlRobin Voetter <robin@voetter.nl> 2024-01-23 22:46:06+01:00
committergravatar for robin@voetter.nlRobin Voetter <robin@voetter.nl> 2024-02-04 19:09:34+01:00
log25111061504a652bfed45b26252349f363b109af
tree524c1ed9f702847d6e61cf678d2b30416e88fb24
parent9fbba0e01a5e89ce4b4be940539b6b05a7fb3931
signaturebadge-check Signed by SSH key SHA256:ZS52FNyUv2WUXvO4njmVaFVO46RHojFuOrxRc4LuKzg

spirv: air vector_store_element


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

src/codegen/spirv.zig+24
...@@ -2236,6 +2236,8 @@ const DeclGen = struct {...@@ -2236,6 +2236,8 @@ const DeclGen = struct {
2236 .ptr_elem_val => try self.airPtrElemVal(inst),2236 .ptr_elem_val => try self.airPtrElemVal(inst),
2237 .array_elem_val => try self.airArrayElemVal(inst),2237 .array_elem_val => try self.airArrayElemVal(inst),
22382238
2239 .vector_store_elem => return self.airVectorStoreElem(inst),
2240
2239 .set_union_tag => return self.airSetUnionTag(inst),2241 .set_union_tag => return self.airSetUnionTag(inst),
2240 .get_union_tag => try self.airGetUnionTag(inst),2242 .get_union_tag => try self.airGetUnionTag(inst),
2241 .union_init => try self.airUnionInit(inst),2243 .union_init => try self.airUnionInit(inst),
...@@ -3824,6 +3826,28 @@ const DeclGen = struct {...@@ -3824,6 +3826,28 @@ const DeclGen = struct {
3824 return try self.load(elem_ty, elem_ptr_id, .{ .is_volatile = ptr_ty.isVolatilePtr(mod) });3826 return try self.load(elem_ty, elem_ptr_id, .{ .is_volatile = ptr_ty.isVolatilePtr(mod) });
3825 }3827 }
38263828
3829 fn airVectorStoreElem(self: *DeclGen, inst: Air.Inst.Index) !void {
3830 const mod = self.module;
3831 const data = self.air.instructions.items(.data)[@intFromEnum(inst)].vector_store_elem;
3832 const extra = self.air.extraData(Air.Bin, data.payload).data;
3833
3834 const vector_ptr_ty = self.typeOf(data.vector_ptr);
3835 const vector_ty = vector_ptr_ty.childType(mod);
3836 const scalar_ty = vector_ty.scalarType(mod);
3837
3838 const storage_class = spvStorageClass(vector_ptr_ty.ptrAddressSpace(mod));
3839 const scalar_ptr_ty_ref = try self.ptrType(scalar_ty, storage_class);
3840
3841 const vector_ptr = try self.resolve(data.vector_ptr);
3842 const index = try self.resolve(extra.lhs);
3843 const operand = try self.resolve(extra.rhs);
3844
3845 const elem_ptr_id = try self.accessChainId(scalar_ptr_ty_ref, vector_ptr, &.{index});
3846 try self.store(scalar_ty, elem_ptr_id, operand, .{
3847 .is_volatile = vector_ptr_ty.isVolatilePtr(mod),
3848 });
3849 }
3850
3827 fn airSetUnionTag(self: *DeclGen, inst: Air.Inst.Index) !void {3851 fn airSetUnionTag(self: *DeclGen, inst: Air.Inst.Index) !void {
3828 const mod = self.module;3852 const mod = self.module;
3829 const bin_op = self.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;3853 const bin_op = self.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
test/behavior/vector.zig-1
...@@ -1344,7 +1344,6 @@ test "store packed vector element" {...@@ -1344,7 +1344,6 @@ test "store packed vector element" {
1344 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO1344 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
1345 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO1345 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
1346 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO1346 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
1347 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
1348 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO1347 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
1349 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO1348 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
1350 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO1349 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO