| ... | @@ -2,10 +2,19 @@ const std = @import("../std.zig"); | ... | @@ -2,10 +2,19 @@ const std = @import("../std.zig"); |
| 2 | const builtin = @import("builtin"); | 2 | const builtin = @import("builtin"); |
| 3 | const testing = std.testing; | 3 | const testing = std.testing; |
| 4 | | 4 | |
| | 5 | fn isComptime() bool { |
| | 6 | var a: u8 = 0; |
| | 7 | return @typeInfo(@TypeOf(.{a})).Struct.fields[0].is_comptime; |
| | 8 | } |
| | 9 | |
| 5 | const has_aesni = std.Target.x86.featureSetHas(builtin.cpu.features, .aes); | 10 | const has_aesni = std.Target.x86.featureSetHas(builtin.cpu.features, .aes); |
| 6 | const has_avx = std.Target.x86.featureSetHas(builtin.cpu.features, .avx); | 11 | const has_avx = std.Target.x86.featureSetHas(builtin.cpu.features, .avx); |
| 7 | const has_armaes = std.Target.aarch64.featureSetHas(builtin.cpu.features, .aes); | 12 | const has_armaes = std.Target.aarch64.featureSetHas(builtin.cpu.features, .aes); |
| 8 | const impl = if (builtin.cpu.arch == .x86_64 and has_aesni and has_avx) impl: { | 13 | const impl = if (isComptime()) |
| | 14 | impl: { |
| | 15 | break :impl @import("aes/soft.zig"); |
| | 16 | } else if (builtin.cpu.arch == .x86_64 and has_aesni and has_avx) |
| | 17 | impl: { |
| 9 | break :impl @import("aes/aesni.zig"); | 18 | break :impl @import("aes/aesni.zig"); |
| 10 | } else if (builtin.cpu.arch == .aarch64 and has_armaes) | 19 | } else if (builtin.cpu.arch == .aarch64 and has_armaes) |
| 11 | impl: { | 20 | impl: { |