| ... | @@ -4,7 +4,12 @@ const std = @import("../std.zig"); | ... | @@ -4,7 +4,12 @@ const std = @import("../std.zig"); |
| 4 | const CpuFeature = std.Target.Cpu.Feature; | 4 | const CpuFeature = std.Target.Cpu.Feature; |
| 5 | const CpuModel = std.Target.Cpu.Model; | 5 | const CpuModel = std.Target.Cpu.Model; |
| 6 | | 6 | |
| 7 | pub const Feature = enum {}; | 7 | pub const Feature = enum { |
| | 8 | fpu, |
| | 9 | vpu, |
| | 10 | xs2, |
| | 11 | xs3, |
| | 12 | }; |
| 8 | | 13 | |
| 9 | pub const featureSet = CpuFeature.FeatureSetFns(Feature).featureSet; | 14 | pub const featureSet = CpuFeature.FeatureSetFns(Feature).featureSet; |
| 10 | pub const featureSetHas = CpuFeature.FeatureSetFns(Feature).featureSetHas; | 15 | pub const featureSetHas = CpuFeature.FeatureSetFns(Feature).featureSetHas; |
| ... | @@ -15,6 +20,32 @@ pub const all_features = blk: { | ... | @@ -15,6 +20,32 @@ pub const all_features = blk: { |
| 15 | const len = @typeInfo(Feature).@"enum".field_names.len; | 20 | const len = @typeInfo(Feature).@"enum".field_names.len; |
| 16 | std.debug.assert(len <= CpuFeature.Set.needed_bit_count); | 21 | std.debug.assert(len <= CpuFeature.Set.needed_bit_count); |
| 17 | var result: [len]CpuFeature = undefined; | 22 | var result: [len]CpuFeature = undefined; |
| | 23 | result[@backingInt(Feature.fpu)] = .{ |
| | 24 | .llvm_name = null, |
| | 25 | .description = "Enable single-precision floating point unit", |
| | 26 | .dependencies = featureSet(&[_]Feature{ |
| | 27 | .xs3, |
| | 28 | }), |
| | 29 | }; |
| | 30 | result[@backingInt(Feature.vpu)] = .{ |
| | 31 | .llvm_name = null, |
| | 32 | .description = "Enable vector processing unit", |
| | 33 | .dependencies = featureSet(&[_]Feature{ |
| | 34 | .xs3, |
| | 35 | }), |
| | 36 | }; |
| | 37 | result[@backingInt(Feature.xs2)] = .{ |
| | 38 | .llvm_name = null, |
| | 39 | .description = "Enable XS2 architecture", |
| | 40 | .dependencies = featureSet(&[_]Feature{}), |
| | 41 | }; |
| | 42 | result[@backingInt(Feature.xs3)] = .{ |
| | 43 | .llvm_name = null, |
| | 44 | .description = "Enable XS3 architecture", |
| | 45 | .dependencies = featureSet(&[_]Feature{ |
| | 46 | .xs2, |
| | 47 | }), |
| | 48 | }; |
| 18 | const ti = @typeInfo(Feature); | 49 | const ti = @typeInfo(Feature); |
| 19 | for (&result, 0..) |*elem, i| { | 50 | for (&result, 0..) |*elem, i| { |
| 20 | elem.index = i; | 51 | elem.index = i; |
| ... | @@ -24,14 +55,24 @@ pub const all_features = blk: { | ... | @@ -24,14 +55,24 @@ pub const all_features = blk: { |
| 24 | }; | 55 | }; |
| 25 | | 56 | |
| 26 | pub const cpu = struct { | 57 | pub const cpu = struct { |
| 27 | pub const generic: CpuModel = .{ | 58 | pub const xs1b: CpuModel = .{ |
| 28 | .name = "generic", | 59 | .name = "xs1b", |
| 29 | .llvm_name = "generic", | 60 | .llvm_name = null, |
| 30 | .features = featureSet(&[_]Feature{}), | 61 | .features = featureSet(&[_]Feature{}), |
| 31 | }; | 62 | }; |
| 32 | pub const xs1b_generic: CpuModel = .{ | 63 | pub const xs2a: CpuModel = .{ |
| 33 | .name = "xs1b_generic", | 64 | .name = "xs2a", |
| 34 | .llvm_name = "xs1b-generic", | 65 | .llvm_name = null, |
| 35 | .features = featureSet(&[_]Feature{}), | 66 | .features = featureSet(&[_]Feature{ |
| | 67 | .xs2, |
| | 68 | }), |
| | 69 | }; |
| | 70 | pub const xs3a: CpuModel = .{ |
| | 71 | .name = "xs3a", |
| | 72 | .llvm_name = null, |
| | 73 | .features = featureSet(&[_]Feature{ |
| | 74 | .fpu, |
| | 75 | .vpu, |
| | 76 | }), |
| 36 | }; | 77 | }; |
| 37 | }; | 78 | }; |