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