| ... | ... | @@ -2236,6 +2236,8 @@ const DeclGen = struct { |
| 2236 | 2236 | .ptr_elem_val => try self.airPtrElemVal(inst), |
| 2237 | 2237 | .array_elem_val => try self.airArrayElemVal(inst), |
| 2238 | 2238 | |
| 2239 | .vector_store_elem => return self.airVectorStoreElem(inst), |
| 2240 | |
| 2239 | 2241 | .set_union_tag => return self.airSetUnionTag(inst), |
| 2240 | 2242 | .get_union_tag => try self.airGetUnionTag(inst), |
| 2241 | 2243 | .union_init => try self.airUnionInit(inst), |
| ... | ... | @@ -3824,6 +3826,28 @@ const DeclGen = struct { |
| 3824 | 3826 | return try self.load(elem_ty, elem_ptr_id, .{ .is_volatile = ptr_ty.isVolatilePtr(mod) }); |
| 3825 | 3827 | } |
| 3826 | 3828 | |
| 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 | 3851 | fn airSetUnionTag(self: *DeclGen, inst: Air.Inst.Index) !void { |
| 3828 | 3852 | const mod = self.module; |
| 3829 | 3853 | const bin_op = self.air.instructions.items(.data)[@intFromEnum(inst)].bin_op; |