Skip to content

Latest commit

 

History

History
141 lines (136 loc) · 38.7 KB

cpu-features.md

File metadata and controls

141 lines (136 loc) · 38.7 KB

Vec128

Function ARM Intel IBM z PowerPC64 Uses
high32 NEON - A7, A32, A64 SSE2 Hacl_Chacha20_Vec256.c, Hacl_SHA2_Vec256.c, Hacl_SHA2_Vec128.c, Hacl_Chacha20_Vec128.c
Lib_IntVector_Intrinsics_vec128_add32 NEON - A7, A32, A64 SSE2 Hacl_Hash_Blake2s_128.c, Hacl_SHA2_Vec128.c, Hacl_Chacha20_Vec128.c
Lib_IntVector_Intrinsics_vec128_add64 NEON - A7, A32, A64 SSE2 Hacl_Poly1305_128.c, Hacl_Chacha20Poly1305_128.c
Lib_IntVector_Intrinsics_vec128_and NEON - A7, A32, A64 SSE2 Hacl_Poly1305_128.c, Hacl_Chacha20Poly1305_128.c, Hacl_SHA2_Vec128.c
Lib_IntVector_Intrinsics_vec128_eq32 NEON - A7, A32, A64 SSE2
Lib_IntVector_Intrinsics_vec128_eq64 NEON - A7, A32, A64 SSE4.1 Hacl_Poly1305_128.c
Lib_IntVector_Intrinsics_vec128_extract32 NEON - A7, A32, A64 SSE4.1
Lib_IntVector_Intrinsics_vec128_extract64 NEON - A7, A32, A64 SSE4.1 Hacl_Poly1305_128.c
Lib_IntVector_Intrinsics_vec128_extract8 NEON - A7, A32, A64 SSE4.1
Lib_IntVector_Intrinsics_vec128_gt32 NEON - A7, A32, A64 SSE2
Lib_IntVector_Intrinsics_vec128_gt64 NEON - A7, A32, A64 SSE4.2 Hacl_Poly1305_128.c
Lib_IntVector_Intrinsics_vec128_insert32 NEON - A7, A32, A64 SSE4.1
Lib_IntVector_Intrinsics_vec128_insert64 NEON - A7, A32, A64 SSE4.1 Hacl_Poly1305_128.c
Lib_IntVector_Intrinsics_vec128_insert8 NEON - A7, A32, A64 SSE4.1
Lib_IntVector_Intrinsics_vec128_interleave_high32 NEON - A64 SSE2 Hacl_SHA2_Vec128.c, Hacl_Chacha20_Vec128.c
Lib_IntVector_Intrinsics_vec128_interleave_high64 NEON - A64 SSE2 Hacl_Poly1305_128.c, Hacl_Chacha20Poly1305_128.c, Hacl_SHA2_Vec128.c, Hacl_Chacha20_Vec128.c
Lib_IntVector_Intrinsics_vec128_interleave_low32 NEON - A64 SSE2 Hacl_SHA2_Vec128.c, Hacl_Chacha20_Vec128.c
Lib_IntVector_Intrinsics_vec128_interleave_low64 NEON - A64 SSE2 Hacl_Poly1305_128.c, Hacl_Chacha20Poly1305_128.c,Hacl_SHA2_Vec128.c, Hacl_Chacha20_Vec128.c
Lib_IntVector_Intrinsics_vec128_load_be - SSE3
Lib_IntVector_Intrinsics_vec128_load128 NEON - A7, A32, A64 -
Lib_IntVector_Intrinsics_vec128_load32 NEON - A7, A32, A64 SSE2 Hacl_Hash_Blake2s_128.c, Hacl_SHA2_Vec128.c, Hacl_Chacha20_Vec128.c, Hacl_HMAC_Blake2s_128.c
Lib_IntVector_Intrinsics_vec128_load32_be NEON - A7, A32, A64 SSE3 Hacl_SHA2_Vec128.c
Lib_IntVector_Intrinsics_vec128_load32_le NEON - A7, A32, A64 SSE2 Hacl_Chacha20_Vec128.c
Lib_IntVector_Intrinsics_vec128_load32s NEON - A7, A32, A64 SSE2 Hacl_Hash_Blake2s_128.c, Hacl_Chacha20_Vec128.c, Hacl_HMAC_Blake2s_128.c
Lib_IntVector_Intrinsics_vec128_load64 NEON - A7, A32, A64 SSE2 Hacl_Poly1305_128.c, Hacl_Chacha20Poly1305_128.c
Lib_IntVector_Intrinsics_vec128_load64_be NEON - A7, A32, A64 SSE3
Lib_IntVector_Intrinsics_vec128_load64_le NEON - A7, A32, A64 SSE2 Hacl_Poly1305_128.c, Hacl_Chacha20Poly1305_128.c
Lib_IntVector_Intrinsics_vec128_load64s NEON - A7, A32, A64 SSE2
Lib_IntVector_Intrinsics_vec128_lognot NEON - A7, A32, A64 SSE2 Hacl_Poly1305_128.c, Hacl_SHA2_Vec128.c
Lib_IntVector_Intrinsics_vec128_mul32 NEON - A7, A32, A64 SSE4.1
Lib_IntVector_Intrinsics_vec128_mul64 NEON - A7, A32, A64 SSE2 Hacl_Poly1305_128.c, Hacl_Chacha20Poly1305_128.c
Lib_IntVector_Intrinsics_vec128_or NEON - A7, A32, A64 SSE2 Hacl_Poly1305_128.c, Hacl_Chacha20Poly1305_128.c
Lib_IntVector_Intrinsics_vec128_rotate_left32 NEON - A7, A32, A64 SSE3 Hacl_Chacha20_Vec128.c
Lib_IntVector_Intrinsics_vec128_rotate_left32_16 NEON - A7, A32, A64 SSE3
Lib_IntVector_Intrinsics_vec128_rotate_left32_24 - SSE3
Lib_IntVector_Intrinsics_vec128_rotate_left32_8 - SSE3
Lib_IntVector_Intrinsics_vec128_rotate_right_lanes32 NEON - A7, A32, A64 SSE2 Hacl_Hash_Blake2s_128.c
Lib_IntVector_Intrinsics_vec128_rotate_right_lanes64 NEON - A7, A32, A64 SSE2
Lib_IntVector_Intrinsics_vec128_rotate_right32 NEON - A7, A32, A64 SSE3 Hacl_Hash_Blake2s_128.c, Hacl_SHA2_Vec128.c
Lib_IntVector_Intrinsics_vec128_rotate_right32_16 NEON - A7, A32, A64 -
Lib_IntVector_Intrinsics_vec128_shift_left NEON - A7, A32, A64 SSE2 Hacl_Poly1305_128.c, Hacl_Chacha20Poly1305_128.c
Lib_IntVector_Intrinsics_vec128_shift_left32 NEON - A7, A32, A64 SSE2
Lib_IntVector_Intrinsics_vec128_shift_left64 NEON - A7, A32, A64 SSE2 Hacl_Poly1305_128.c, Hacl_Chacha20Poly1305_128.c
Lib_IntVector_Intrinsics_vec128_shift_right NEON - A7, A32, A64 SSE2 Hacl_Poly1305_128.c, Hacl_Chacha20Poly1305_128.c, Hacl_SHA2_Vec128.c
Lib_IntVector_Intrinsics_vec128_shift_right32 NEON - A7, A32, A64 SSE2 Hacl_SHA2_Vec128.c
Lib_IntVector_Intrinsics_vec128_shift_right64 NEON - A7, A32, A64 SSE2 Hacl_Poly1305_128.c, Hacl_Chacha20Poly1305_128.c
Lib_IntVector_Intrinsics_vec128_shuffle32 - SSE2
Lib_IntVector_Intrinsics_vec128_shuffle64 - SSE2
Lib_IntVector_Intrinsics_vec128_smul32 NEON - A7, A32, A64 SSE4.1
Lib_IntVector_Intrinsics_vec128_smul64 NEON - A7, A32, A64 SSE2 Hacl_Poly1305_128.c
Lib_IntVector_Intrinsics_vec128_store_be - SSE3
Lib_IntVector_Intrinsics_vec128_store32_be NEON - A7, A32, A64 SSE3 Hacl_SHA2_Vec128.c
Lib_IntVector_Intrinsics_vec128_store32_le NEON - A7, A32, A64 SSE2 Hacl_Hash_Blake2s_128.c, Hacl_Chacha20_Vec128.c
Lib_IntVector_Intrinsics_vec128_store64_be NEON - A7, A32, A64 SSE3
Lib_IntVector_Intrinsics_vec128_store64_le NEON - A7, A32, A64 SSE2
Lib_IntVector_Intrinsics_vec128_sub32 NEON - A7, A32, A64 SSE2
Lib_IntVector_Intrinsics_vec128_sub64 NEON - A7, A32, A64 SSE2 Hacl_Poly1305_128.c
Lib_IntVector_Intrinsics_vec128_xor NEON - A7, A32, A64 SSE2 Hacl_Hash_Blake2s_128.c, Hacl_SHA2_Vec128.c, Hacl_Chacha20_Vec128.c
Lib_IntVector_Intrinsics_vec128_zero NEON - A7, A32, A64 SSE2 Hacl_Hash_Blake2s_128.c Hacl_Poly1305_128.c Hacl_Streaming_Blake2s_128.c Hacl_Chacha20Poly1305_128.c Hacl_SHA2_Vec128.c Hacl_Chacha20_Vec128.c Hacl_HMAC_Blake2s_128.c Hacl_Streaming_Poly1305_128.c
low32 NEON - A7, A32, A64 - Hacl_Chacha20_Vec256.c, Hacl_SHA2_Vec256.c, Hacl_SHA2_Vec128.c, Hacl_Chacha20_Vec128.c

Note that for SSE only the highest version is mentions. We have to check for all lower versions.

Vec 256

Function ARM Intel IBM z PowerPC64 Uses
Lib_IntVector_Intrinsics_vec256_add32 AVX2 Hacl_Chacha20_Vec256.c, Hacl_SHA2_Vec256.c, libintvector.h
Lib_IntVector_Intrinsics_vec256_add64 AVX2 Hacl_SHA2_Vec256.c, Hacl_Poly1305_256.c, Hacl_Hash_Blake2b_256.c, Hacl_Chacha20Poly1305_256.c
Lib_IntVector_Intrinsics_vec256_and AVX2 Hacl_SHA2_Vec256.c, Hacl_Poly1305_256.c, Hacl_Chacha20Poly1305_256.c
Lib_IntVector_Intrinsics_vec256_eq32 AVX2
Lib_IntVector_Intrinsics_vec256_extract8 AVX2
Lib_IntVector_Intrinsics_vec256_gt32 AVX2
Lib_IntVector_Intrinsics_vec256_gt64 AVX2 Hacl_Poly1305_256.c
Lib_IntVector_Intrinsics_vec256_interleave_high128 AVX2 Hacl_Chacha20_Vec256.c, Hacl_SHA2_Vec256.c, Hacl_Poly1305_256.c, Hacl_Chacha20Poly1305_256.c
Lib_IntVector_Intrinsics_vec256_interleave_high32 AVX2 Hacl_Chacha20_Vec256.c, Hacl_SHA2_Vec256.c
Lib_IntVector_Intrinsics_vec256_interleave_high64 AVX2 Hacl_Chacha20_Vec256.c, Hacl_SHA2_Vec256.c, Hacl_Poly1305_256.c, Hacl_Chacha20Poly1305_256.c
Lib_IntVector_Intrinsics_vec256_interleave_low128 AVX2 Hacl_Chacha20_Vec256.c, Hacl_SHA2_Vec256.c, Hacl_Poly1305_256.c, Hacl_Chacha20Poly1305_256.c
Lib_IntVector_Intrinsics_vec256_interleave_low32 AVX2 Hacl_Chacha20_Vec256.c, Hacl_SHA2_Vec256.c
Lib_IntVector_Intrinsics_vec256_interleave_low64 AVX2 Hacl_Chacha20_Vec256.c, Hacl_SHA2_Vec256.c, Hacl_Poly1305_256.c, Hacl_Chacha20Poly1305_256.c
Lib_IntVector_Intrinsics_vec256_mul32 AVX2
Lib_IntVector_Intrinsics_vec256_mul64 AVX2 Hacl_Poly1305_256.c, Hacl_Chacha20Poly1305_256.c
Lib_IntVector_Intrinsics_vec256_or AVX2 Hacl_Poly1305_256.c, Hacl_Chacha20Poly1305_256.c
Lib_IntVector_Intrinsics_vec256_rotate_left32 AVX2 Hacl_Chacha20_Vec256.c
Lib_IntVector_Intrinsics_vec256_rotate_left32_16 AVX2
Lib_IntVector_Intrinsics_vec256_rotate_left32_24 AVX2
Lib_IntVector_Intrinsics_vec256_rotate_left32_8 AVX2
Lib_IntVector_Intrinsics_vec256_rotate_left64 AVX2
Lib_IntVector_Intrinsics_vec256_rotate_right_lanes32 AVX2
Lib_IntVector_Intrinsics_vec256_rotate_right_lanes64 AVX2 Hacl_Hash_Blake2b_256.c
Lib_IntVector_Intrinsics_vec256_rotate_right32 AVX2 Hacl_SHA2_Vec256.c
Lib_IntVector_Intrinsics_vec256_rotate_right64 AVX2 Hacl_SHA2_Vec256.c, Hacl_Hash_Blake2b_256.c
Lib_IntVector_Intrinsics_vec256_rotate_right64_16 AVX2
Lib_IntVector_Intrinsics_vec256_rotate_right64_24 AVX2
Lib_IntVector_Intrinsics_vec256_rotate_right64_32 AVX2
Lib_IntVector_Intrinsics_vec256_rotate_right64_40 AVX2
Lib_IntVector_Intrinsics_vec256_rotate_right64_48 AVX2
Lib_IntVector_Intrinsics_vec256_rotate_right64_56 AVX2
Lib_IntVector_Intrinsics_vec256_rotate_right64_8 AVX2
Lib_IntVector_Intrinsics_vec256_shift_left AVX2 Hacl_Poly1305_256.c, Hacl_Chacha20Poly1305_256.c
Lib_IntVector_Intrinsics_vec256_shift_left32 AVX2
Lib_IntVector_Intrinsics_vec256_shift_left64 AVX2 Hacl_Poly1305_256.c, Hacl_Chacha20Poly1305_256.c
Lib_IntVector_Intrinsics_vec256_shift_right AVX2 Hacl_SHA2_Vec256.c, Hacl_Poly1305_256.c, Hacl_Chacha20Poly1305_256.c
Lib_IntVector_Intrinsics_vec256_shift_right32 AVX2 Hacl_SHA2_Vec256.c
Lib_IntVector_Intrinsics_vec256_shift_right64 AVX2 Hacl_SHA2_Vec256.c, Hacl_Poly1305_256.c, Hacl_Chacha20Poly1305_256.c
Lib_IntVector_Intrinsics_vec256_shuffle32 AVX2
Lib_IntVector_Intrinsics_vec256_shuffle64 AVX2
Lib_IntVector_Intrinsics_vec256_smul64 AVX2 Hacl_Poly1305_256.c
Lib_IntVector_Intrinsics_vec256_sub32 AVX2
Lib_IntVector_Intrinsics_vec256_sub64 AVX2 Hacl_Poly1305_256.c
Lib_IntVector_Intrinsics_vec256_xor AVX2 Hacl_Chacha20_Vec256.c, Hacl_SHA2_Vec256.c, Hacl_Hash_Blake2b_256.c
Lib_IntVector_Intrinsics_vec256_eq64 AVX2 Hacl_Poly1305_256.c
Lib_IntVector_Intrinsics_vec256_load32_be AVX2 Hacl_SHA2_Vec256.c
Lib_IntVector_Intrinsics_vec256_load64_be AVX2 Hacl_SHA2_Vec256.c
Lib_IntVector_Intrinsics_vec256_lognot AVX2 Hacl_SHA2_Vec256.c, Hacl_Poly1305_256.c
Lib_IntVector_Intrinsics_vec256_smul32 AVX2
Lib_IntVector_Intrinsics_vec256_store32_be AVX2 Hacl_SHA2_Vec256.c
Lib_IntVector_Intrinsics_vec256_store64_be AVX2 Hacl_SHA2_Vec256.c
Lib_IntVector_Intrinsics_vec256_extract32 AVX
Lib_IntVector_Intrinsics_vec256_extract64 AVX Hacl_Poly1305_256.c
Lib_IntVector_Intrinsics_vec256_insert32 AVX
Lib_IntVector_Intrinsics_vec256_insert64 AVX Hacl_Poly1305_256.c
Lib_IntVector_Intrinsics_vec256_insert8 AVX
Lib_IntVector_Intrinsics_vec256_load128 AVX
Lib_IntVector_Intrinsics_vec256_load128s AVX
Lib_IntVector_Intrinsics_vec256_load32 AVX Hacl_Chacha20_Vec256.c, Hacl_SHA2_Vec256.c
Lib_IntVector_Intrinsics_vec256_load32_le AVX Hacl_Chacha20_Vec256.c
Lib_IntVector_Intrinsics_vec256_load32s AVX Hacl_Chacha20_Vec256.c
Lib_IntVector_Intrinsics_vec256_load64 AVX Hacl_SHA2_Vec256.c, Hacl_Poly1305_256.c, Hacl_Hash_Blake2b_256.c, Hacl_Chacha20Poly1305_256.c, Hacl_HMAC_Blake2b_256.c
Lib_IntVector_Intrinsics_vec256_load64_le AVX Hacl_Poly1305_256.c, Hacl_Chacha20Poly1305_256.c
Lib_IntVector_Intrinsics_vec256_load64s AVX Hacl_Hash_Blake2b_256.c, Hacl_HMAC_Blake2b_256.c
Lib_IntVector_Intrinsics_vec256_store32_le AVX Hacl_Chacha20_Vec256.c
Lib_IntVector_Intrinsics_vec256_store64_le AVX Hacl_Hash_Blake2b_256.c
Lib_IntVector_Intrinsics_vec256_zero AVX Hacl_Streaming_Poly1305_256.c, Hacl_Chacha20_Vec256.c, Hacl_SHA2_Vec256.c, Hacl_Poly1305_256.c, Hacl_Hash_Blake2b_256.c, Hacl_Chacha20Poly1305_256.c, Hacl_HMAC_Blake2b_256.c, Hacl_Streaming_Blake2b_256.c

AVX2 requires AVX as well.