xref: /freebsd/lib/libmd/aarch64/sha1dispatch.c (revision f6210541f9e3c6cfda321e0ad98f277fb98a625b)
1 /*-
2  * Copyright (c) 2024 Robert Clausecker <fuz@freebsd.org>
3  *
4  * SPDX-License-Identifier: BSD-2-Clause
5  */
6 
7 #include <machine/ifunc.h>
8 #include <sha.h>
9 #include <sys/auxv.h>
10 
11 extern void _libmd_sha1block_scalar(SHA1_CTX *, const void *, size_t);
12 extern void _libmd_sha1block_sha1(SHA1_CTX *, const void *, size_t);
13 
14 DEFINE_IFUNC(, void, sha1_block, (SHA1_CTX *, const void *, size_t))
15 {
16 	unsigned long hwcap = 0;
17 
18 	elf_aux_info(AT_HWCAP, &hwcap, sizeof(hwcap));
19 
20 	if (hwcap & HWCAP_SHA1)
21 		return (_libmd_sha1block_sha1);
22 	else
23 		return (_libmd_sha1block_scalar);
24 }
25