| ... | ... | @@ -1,8 +1,21 @@ |
| 1 | //! This file is auto-generated by tools/update_cpu_features.zig. |
| 2 | |
| 1 | 3 | const std = @import("../std.zig"); |
| 2 | 4 | const CpuFeature = std.Target.Cpu.Feature; |
| 3 | 5 | const CpuModel = std.Target.Cpu.Model; |
| 4 | 6 | |
| 5 | 7 | pub const Feature = enum { |
| 8 | addresses, |
| 9 | arbitrary_precision_integers, |
| 10 | float16, |
| 11 | float64, |
| 12 | generic_pointer, |
| 13 | int64, |
| 14 | kernel, |
| 15 | matrix, |
| 16 | physical_storage_buffer, |
| 17 | shader, |
| 18 | storage_push_constant16, |
| 6 | 19 | v1_0, |
| 7 | 20 | v1_1, |
| 8 | 21 | v1_2, |
| ... | ... | @@ -10,19 +23,8 @@ pub const Feature = enum { |
| 10 | 23 | v1_4, |
| 11 | 24 | v1_5, |
| 12 | 25 | v1_6, |
| 13 | | int64, |
| 14 | | float16, |
| 15 | | float64, |
| 16 | | matrix, |
| 17 | | storage_push_constant16, |
| 18 | | arbitrary_precision_integers, |
| 19 | | kernel, |
| 20 | | addresses, |
| 21 | | generic_pointer, |
| 22 | | vector16, |
| 23 | | shader, |
| 24 | 26 | variable_pointers, |
| 25 | | physical_storage_buffer, |
| 27 | vector16, |
| 26 | 28 | }; |
| 27 | 29 | |
| 28 | 30 | pub const featureSet = CpuFeature.FeatureSetFns(Feature).featureSet; |
| ... | ... | @@ -35,105 +37,143 @@ pub const all_features = blk: { |
| 35 | 37 | const len = @typeInfo(Feature).@"enum".fields.len; |
| 36 | 38 | std.debug.assert(len <= CpuFeature.Set.needed_bit_count); |
| 37 | 39 | var result: [len]CpuFeature = undefined; |
| 38 | | result[@intFromEnum(Feature.v1_0)] = .{ |
| 39 | | .llvm_name = null, |
| 40 | | .description = "Enable version 1.0", |
| 41 | | .dependencies = featureSet(&[_]Feature{}), |
| 42 | | }; |
| 43 | | result[@intFromEnum(Feature.v1_1)] = .{ |
| 44 | | .llvm_name = null, |
| 45 | | .description = "Enable version 1.1", |
| 46 | | .dependencies = featureSet(&[_]Feature{.v1_0}), |
| 47 | | }; |
| 48 | | result[@intFromEnum(Feature.v1_2)] = .{ |
| 40 | result[@intFromEnum(Feature.addresses)] = .{ |
| 49 | 41 | .llvm_name = null, |
| 50 | | .description = "Enable version 1.2", |
| 51 | | .dependencies = featureSet(&[_]Feature{.v1_1}), |
| 42 | .description = "Enable Addresses capability", |
| 43 | .dependencies = featureSet(&[_]Feature{ |
| 44 | .v1_0, |
| 45 | }), |
| 52 | 46 | }; |
| 53 | | result[@intFromEnum(Feature.v1_3)] = .{ |
| 47 | result[@intFromEnum(Feature.arbitrary_precision_integers)] = .{ |
| 54 | 48 | .llvm_name = null, |
| 55 | | .description = "Enable version 1.3", |
| 56 | | .dependencies = featureSet(&[_]Feature{.v1_2}), |
| 49 | .description = "Enable SPV_INTEL_arbitrary_precision_integers extension and the ArbitraryPrecisionIntegersINTEL capability", |
| 50 | .dependencies = featureSet(&[_]Feature{ |
| 51 | .v1_5, |
| 52 | }), |
| 57 | 53 | }; |
| 58 | | result[@intFromEnum(Feature.v1_4)] = .{ |
| 54 | result[@intFromEnum(Feature.float16)] = .{ |
| 59 | 55 | .llvm_name = null, |
| 60 | | .description = "Enable version 1.4", |
| 61 | | .dependencies = featureSet(&[_]Feature{.v1_3}), |
| 56 | .description = "Enable Float16 capability", |
| 57 | .dependencies = featureSet(&[_]Feature{ |
| 58 | .v1_0, |
| 59 | }), |
| 62 | 60 | }; |
| 63 | | result[@intFromEnum(Feature.v1_5)] = .{ |
| 61 | result[@intFromEnum(Feature.float64)] = .{ |
| 64 | 62 | .llvm_name = null, |
| 65 | | .description = "Enable version 1.5", |
| 66 | | .dependencies = featureSet(&[_]Feature{.v1_4}), |
| 63 | .description = "Enable Float64 capability", |
| 64 | .dependencies = featureSet(&[_]Feature{ |
| 65 | .v1_0, |
| 66 | }), |
| 67 | 67 | }; |
| 68 | | result[@intFromEnum(Feature.v1_6)] = .{ |
| 68 | result[@intFromEnum(Feature.generic_pointer)] = .{ |
| 69 | 69 | .llvm_name = null, |
| 70 | | .description = "Enable version 1.6", |
| 71 | | .dependencies = featureSet(&[_]Feature{.v1_5}), |
| 70 | .description = "Enable GenericPointer capability", |
| 71 | .dependencies = featureSet(&[_]Feature{ |
| 72 | .addresses, |
| 73 | }), |
| 72 | 74 | }; |
| 73 | 75 | result[@intFromEnum(Feature.int64)] = .{ |
| 74 | 76 | .llvm_name = null, |
| 75 | 77 | .description = "Enable Int64 capability", |
| 76 | | .dependencies = featureSet(&[_]Feature{.v1_0}), |
| 77 | | }; |
| 78 | | result[@intFromEnum(Feature.float16)] = .{ |
| 79 | | .llvm_name = null, |
| 80 | | .description = "Enable Float16 capability", |
| 81 | | .dependencies = featureSet(&[_]Feature{.v1_0}), |
| 78 | .dependencies = featureSet(&[_]Feature{ |
| 79 | .v1_0, |
| 80 | }), |
| 82 | 81 | }; |
| 83 | | result[@intFromEnum(Feature.float64)] = .{ |
| 82 | result[@intFromEnum(Feature.kernel)] = .{ |
| 84 | 83 | .llvm_name = null, |
| 85 | | .description = "Enable Float64 capability", |
| 86 | | .dependencies = featureSet(&[_]Feature{.v1_0}), |
| 84 | .description = "Enable Kernel capability", |
| 85 | .dependencies = featureSet(&[_]Feature{ |
| 86 | .v1_0, |
| 87 | }), |
| 87 | 88 | }; |
| 88 | 89 | result[@intFromEnum(Feature.matrix)] = .{ |
| 89 | 90 | .llvm_name = null, |
| 90 | 91 | .description = "Enable Matrix capability", |
| 91 | | .dependencies = featureSet(&[_]Feature{.v1_0}), |
| 92 | .dependencies = featureSet(&[_]Feature{ |
| 93 | .v1_0, |
| 94 | }), |
| 95 | }; |
| 96 | result[@intFromEnum(Feature.physical_storage_buffer)] = .{ |
| 97 | .llvm_name = null, |
| 98 | .description = "Enable SPV_KHR_variable_pointers extension and the (VariablePointers, VariablePointersStorageBuffer) capabilities", |
| 99 | .dependencies = featureSet(&[_]Feature{ |
| 100 | .v1_0, |
| 101 | }), |
| 102 | }; |
| 103 | result[@intFromEnum(Feature.shader)] = .{ |
| 104 | .llvm_name = null, |
| 105 | .description = "Enable Shader capability", |
| 106 | .dependencies = featureSet(&[_]Feature{ |
| 107 | .matrix, |
| 108 | }), |
| 92 | 109 | }; |
| 93 | 110 | result[@intFromEnum(Feature.storage_push_constant16)] = .{ |
| 94 | 111 | .llvm_name = null, |
| 95 | 112 | .description = "Enable SPV_KHR_16bit_storage extension and the StoragePushConstant16 capability", |
| 96 | | .dependencies = featureSet(&[_]Feature{.v1_3}), |
| 113 | .dependencies = featureSet(&[_]Feature{ |
| 114 | .v1_3, |
| 115 | }), |
| 97 | 116 | }; |
| 98 | | result[@intFromEnum(Feature.arbitrary_precision_integers)] = .{ |
| 117 | result[@intFromEnum(Feature.v1_0)] = .{ |
| 99 | 118 | .llvm_name = null, |
| 100 | | .description = "Enable SPV_INTEL_arbitrary_precision_integers extension and the ArbitraryPrecisionIntegersINTEL capability", |
| 101 | | .dependencies = featureSet(&[_]Feature{.v1_5}), |
| 119 | .description = "Enable version 1.0", |
| 120 | .dependencies = featureSet(&[_]Feature{}), |
| 102 | 121 | }; |
| 103 | | result[@intFromEnum(Feature.kernel)] = .{ |
| 122 | result[@intFromEnum(Feature.v1_1)] = .{ |
| 104 | 123 | .llvm_name = null, |
| 105 | | .description = "Enable Kernel capability", |
| 106 | | .dependencies = featureSet(&[_]Feature{.v1_0}), |
| 124 | .description = "Enable version 1.1", |
| 125 | .dependencies = featureSet(&[_]Feature{ |
| 126 | .v1_0, |
| 127 | }), |
| 107 | 128 | }; |
| 108 | | result[@intFromEnum(Feature.addresses)] = .{ |
| 129 | result[@intFromEnum(Feature.v1_2)] = .{ |
| 109 | 130 | .llvm_name = null, |
| 110 | | .description = "Enable Addresses capability", |
| 111 | | .dependencies = featureSet(&[_]Feature{.v1_0}), |
| 131 | .description = "Enable version 1.2", |
| 132 | .dependencies = featureSet(&[_]Feature{ |
| 133 | .v1_1, |
| 134 | }), |
| 112 | 135 | }; |
| 113 | | result[@intFromEnum(Feature.generic_pointer)] = .{ |
| 136 | result[@intFromEnum(Feature.v1_3)] = .{ |
| 114 | 137 | .llvm_name = null, |
| 115 | | .description = "Enable GenericPointer capability", |
| 116 | | .dependencies = featureSet(&[_]Feature{ .v1_0, .addresses }), |
| 138 | .description = "Enable version 1.3", |
| 139 | .dependencies = featureSet(&[_]Feature{ |
| 140 | .v1_2, |
| 141 | }), |
| 117 | 142 | }; |
| 118 | | result[@intFromEnum(Feature.vector16)] = .{ |
| 143 | result[@intFromEnum(Feature.v1_4)] = .{ |
| 119 | 144 | .llvm_name = null, |
| 120 | | .description = "Enable Vector16 capability", |
| 121 | | .dependencies = featureSet(&[_]Feature{ .v1_0, .kernel }), |
| 145 | .description = "Enable version 1.4", |
| 146 | .dependencies = featureSet(&[_]Feature{ |
| 147 | .v1_3, |
| 148 | }), |
| 122 | 149 | }; |
| 123 | | result[@intFromEnum(Feature.shader)] = .{ |
| 150 | result[@intFromEnum(Feature.v1_5)] = .{ |
| 124 | 151 | .llvm_name = null, |
| 125 | | .description = "Enable Shader capability", |
| 126 | | .dependencies = featureSet(&[_]Feature{ .v1_0, .matrix }), |
| 152 | .description = "Enable version 1.5", |
| 153 | .dependencies = featureSet(&[_]Feature{ |
| 154 | .v1_4, |
| 155 | }), |
| 127 | 156 | }; |
| 128 | | result[@intFromEnum(Feature.physical_storage_buffer)] = .{ |
| 157 | result[@intFromEnum(Feature.v1_6)] = .{ |
| 129 | 158 | .llvm_name = null, |
| 130 | | .description = "Enable SPV_KHR_physical_storage_buffer extension and the PhysicalStorageBufferAddresses capability", |
| 131 | | .dependencies = featureSet(&[_]Feature{.v1_0}), |
| 159 | .description = "Enable version 1.6", |
| 160 | .dependencies = featureSet(&[_]Feature{ |
| 161 | .v1_5, |
| 162 | }), |
| 132 | 163 | }; |
| 133 | 164 | result[@intFromEnum(Feature.variable_pointers)] = .{ |
| 134 | 165 | .llvm_name = null, |
| 135 | | .description = "Enable SPV_KHR_variable_pointers extension and the (VariablePointers, VariablePointersStorageBuffer) capabilities", |
| 136 | | .dependencies = featureSet(&[_]Feature{.v1_0}), |
| 166 | .description = "Enable SPV_KHR_physical_storage_buffer extension and the PhysicalStorageBufferAddresses capability", |
| 167 | .dependencies = featureSet(&[_]Feature{ |
| 168 | .v1_0, |
| 169 | }), |
| 170 | }; |
| 171 | result[@intFromEnum(Feature.vector16)] = .{ |
| 172 | .llvm_name = null, |
| 173 | .description = "Enable Vector16 capability", |
| 174 | .dependencies = featureSet(&[_]Feature{ |
| 175 | .kernel, |
| 176 | }), |
| 137 | 177 | }; |
| 138 | 178 | const ti = @typeInfo(Feature); |
| 139 | 179 | for (&result, 0..) |*elem, i| { |
| ... | ... | @@ -147,18 +187,23 @@ pub const cpu = struct { |
| 147 | 187 | pub const generic: CpuModel = .{ |
| 148 | 188 | .name = "generic", |
| 149 | 189 | .llvm_name = "generic", |
| 150 | | .features = featureSet(&[_]Feature{.v1_0}), |
| 151 | | }; |
| 152 | | |
| 153 | | pub const vulkan_v1_2: CpuModel = .{ |
| 154 | | .name = "vulkan_v1_2", |
| 155 | | .llvm_name = null, |
| 156 | | .features = featureSet(&[_]Feature{ .v1_5, .shader }), |
| 190 | .features = featureSet(&[_]Feature{}), |
| 157 | 191 | }; |
| 158 | | |
| 159 | 192 | pub const opencl_v2: CpuModel = .{ |
| 160 | 193 | .name = "opencl_v2", |
| 161 | 194 | .llvm_name = null, |
| 162 | | .features = featureSet(&[_]Feature{ .v1_2, .kernel, .addresses, .generic_pointer }), |
| 195 | .features = featureSet(&[_]Feature{ |
| 196 | .generic_pointer, |
| 197 | .kernel, |
| 198 | .v1_2, |
| 199 | }), |
| 200 | }; |
| 201 | pub const vulkan_v1_2: CpuModel = .{ |
| 202 | .name = "vulkan_v1_2", |
| 203 | .llvm_name = null, |
| 204 | .features = featureSet(&[_]Feature{ |
| 205 | .shader, |
| 206 | .v1_5, |
| 207 | }), |
| 163 | 208 | }; |
| 164 | 209 | }; |