root/lib/libmd/aarch64/sha1dispatch.c
/*-
 * Copyright (c) 2024 Robert Clausecker <fuz@FreeBSD.org>
 *
 * SPDX-License-Identifier: BSD-2-Clause
 */

#include <machine/ifunc.h>
#include <sha.h>
#include <sys/auxv.h>

extern void _libmd_sha1block_scalar(SHA1_CTX *, const void *, size_t);
extern void _libmd_sha1block_sha1(SHA1_CTX *, const void *, size_t);

DEFINE_IFUNC(, void, sha1_block, (SHA1_CTX *, const void *, size_t))
{
        unsigned long hwcap = 0;

        elf_aux_info(AT_HWCAP, &hwcap, sizeof(hwcap));

        if (hwcap & HWCAP_SHA1)
                return (_libmd_sha1block_sha1);
        else
                return (_libmd_sha1block_scalar);
}