authorgravatar for 124872+jedisct1@users.noreply.github.comFrank Denis <124872+jedisct1@users.noreply.github.com> 2026-10-04 11:24:21+02:00
committergravatar for 124872+jedisct1@users.noreply.github.comFrank Denis <124872+jedisct1@users.noreply.github.com> 2026-10-19 15:45:07+02:00
log86fb10d327301e25234616752ebe5c40158d4a78
tree517564e28daf96ed0992f3360cd1305924437a03
parente85c5928ac4ee993edefe42984411a90d0fbbf52

crypto.aes: correctly set has_hardware_support

On macOS with the stage2 C backend, we use the software AES implementation because the C backend can't pass vectors to inline assembly. But because the hardware still supports hardware AES, we use to set `has_hardware_support` to true. Fix that and improve readability by the way.

1 files changed, 5 insertions(+), 5 deletions(-)

lib/std/crypto/aes.zig+5-5
......@@ -5,10 +5,12 @@ const testing = std.testing;
55const has_aesni = builtin.cpu.has(.x86, .aes);
66const has_avx = builtin.cpu.has(.x86, .avx);
77const has_armaes = builtin.cpu.has(.aarch64, .aes);
8const use_aesni = builtin.cpu.arch == .x86_64 and has_aesni and has_avx;
89// C backend doesn't currently support passing vectors to inline asm.
9const impl = if (builtin.cpu.arch == .x86_64 and has_aesni and has_avx) impl: {
10const use_armaes = builtin.cpu.arch == .aarch64 and (builtin.zig_backend != .stage2_c or !builtin.os.tag.isDarwin()) and has_armaes;
11const impl = if (use_aesni) impl: {
1012 break :impl @import("aes/aesni.zig");
11} else if (builtin.cpu.arch == .aarch64 and (builtin.zig_backend != .stage2_c or !builtin.os.tag.isDarwin()) and has_armaes) impl: {
13} else if (use_armaes) impl: {
1214 break :impl @import("aes/armcrypto.zig");
1315} else impl: {
1416 break :impl @import("aes/soft.zig");
......@@ -16,9 +18,7 @@ const impl = if (builtin.cpu.arch == .x86_64 and has_aesni and has_avx) impl: {
1618
1719/// `true` if AES is backed by hardware (AES-NI on x86_64, ARM Crypto Extensions on AArch64).
1820/// Software implementations are much slower, and should be avoided if possible.
19pub const has_hardware_support =
20 (builtin.cpu.arch == .x86_64 and has_aesni and has_avx) or
21 (builtin.cpu.arch == .aarch64 and has_armaes);
21pub const has_hardware_support = use_aesni or use_armaes;
2222
2323pub const Block = impl.Block;
2424pub const BlockVec = impl.BlockVec;