提交 f3c26535 编写于 作者: A Andy Polyakov

Make some shortcuts in sparcv9cap.c. Trouble is that di_walk_node result

is inconsistent among CPU generations.
上级 23296942
...@@ -41,6 +41,7 @@ unsigned long OPENSSL_rdtsc(void) ...@@ -41,6 +41,7 @@ unsigned long OPENSSL_rdtsc(void)
#include <dlfcn.h> #include <dlfcn.h>
#include <libdevinfo.h> #include <libdevinfo.h>
#include <sys/systeminfo.h>
typedef di_node_t (*di_init_t)(const char *,uint_t); typedef di_node_t (*di_init_t)(const char *,uint_t);
typedef void (*di_fini_t)(di_node_t); typedef void (*di_fini_t)(di_node_t);
...@@ -79,7 +80,7 @@ static int walk_nodename(di_node_t node, di_node_name_t di_node_name) ...@@ -79,7 +80,7 @@ static int walk_nodename(di_node_t node, di_node_name_t di_node_name)
void OPENSSL_cpuid_setup(void) void OPENSSL_cpuid_setup(void)
{ {
void *h; void *h;
char *e; char *e,si[256];
static int trigger=0; static int trigger=0;
if (trigger) return; if (trigger) return;
...@@ -91,6 +92,25 @@ void OPENSSL_cpuid_setup(void) ...@@ -91,6 +92,25 @@ void OPENSSL_cpuid_setup(void)
return; return;
} }
if (sysinfo(SI_MACHINE,si,sizeof(si))>0)
{
if (strcmp(si,"sun4v"))
/* FPU is preferred for all CPUs, but US-T1/2 */
OPENSSL_sparcv9cap_P |= SPARCV9_PREFER_FPU;
}
if (sysinfo(SI_ISALIST,si,sizeof(si))>0)
{
if (strstr(si,"+vis"))
OPENSSL_sparcv9cap_P |= SPARCV9_VIS1;
if (strstr(si,"+vis2"))
{
OPENSSL_sparcv9cap_P |= SPARCV9_VIS2;
OPENSSL_sparcv9cap_P &= ~SPARCV9_TICK_PRIVILEGED;
return;
}
}
if ((h = dlopen("libdevinfo.so.1",RTLD_LAZY))) do if ((h = dlopen("libdevinfo.so.1",RTLD_LAZY))) do
{ {
di_init_t di_init; di_init_t di_init;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册