summaryrefslogtreecommitdiff
path: root/lib/libcrypto/ppccap.c
blob: 47b613e536781dc06162df9e92c1ea1c3b74bcb6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
/* $OpenBSD: ppccap.c,v 1.5 2014/06/12 15:49:27 deraadt Exp $ */
#include <unistd.h>
#include <sys/param.h>
#include <sys/sysctl.h>
#include <machine/cpu.h>

#include <crypto.h>
#include <openssl/bn.h>

#ifdef unused
#define PPC_FPU64	(1<<0)
#define PPC_ALTIVEC	(1<<1)

static int OPENSSL_ppccap_P = 0;
#endif

#ifdef OPENSSL_BN_ASM_MONT
extern int bn_mul_mont_int(BN_ULONG *, const BN_ULONG *, const BN_ULONG *,
	    const BN_ULONG *, const BN_ULONG *, int);
int
bn_mul_mont(BN_ULONG *rp, const BN_ULONG *ap, const BN_ULONG *bp,
    const BN_ULONG *np, const BN_ULONG *n0, int num)
{
	return bn_mul_mont_int(rp, ap, bp, np, n0, num);
}
#endif

#ifdef unused
void OPENSSL_cpuid_setup(void) __attribute__((constructor));

void
OPENSSL_cpuid_setup(void)
{
	static const int mib[2] = { CTL_MACHDEP, CPU_ALTIVEC };
	static int trigger = 0;
	int altivec = 0;
	size_t size;

	if (trigger)
		return;
	trigger = 1;

	size = sizeof altivec;
	if (sysctl(mib, 2, &altivec, &size, NULL, 0) != -1) {
		if (altivec != 0)
			OPENSSL_ppccap_P |= PPC_ALTIVEC;
	}
}
#endif