Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Third Party Openssl
提交
c06b0f3d
T
Third Party Openssl
项目概览
OpenHarmony
/
Third Party Openssl
1 年多 前同步成功
通知
10
Star
18
Fork
1
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
Third Party Openssl
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
c06b0f3d
编写于
12月 15, 2005
作者:
A
Andy Polyakov
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
sparccpuid module update.
上级
68ea6068
变更
2
显示空白变更内容
内联
并排
Showing
2 changed file
with
150 addition
and
19 deletion
+150
-19
crypto/sparccpuid.S
crypto/sparccpuid.S
+17
-19
crypto/sparcv9cap.c
crypto/sparcv9cap.c
+133
-0
未找到文件。
crypto/sparccpuid.S
浏览文件 @
c06b0f3d
...
...
@@ -34,7 +34,8 @@ OPENSSL_wipe_cpu:
nop
call
.
PIC
.
zero
.
up
mov
.
zero
-(
.
-
4
),%
o0
ldd
[%
o0
],
%f0
ld
[%
o0
],
%f0
ld
[%
o0
],
%f1
subcc
%
g0
,
1
,%
o0
!
Following
is
V9
"rd %ccr,%o0"
instruction
.
However
!
V8
...
...
@@ -166,6 +167,7 @@ walk_reg_wins:
.
global
OPENSSL_atomic_add
.
type
OPENSSL_atomic_add
,#
function
.
align
32
OPENSSL_atomic_add
:
#ifndef ABI64
subcc
%
g0
,
1
,%
o2
...
...
@@ -213,27 +215,23 @@ OPENSSL_atomic_add:
sra
%
o0
,%
g0
,%
o0
!
we
return
signed
int
,
remember
?
.
size
OPENSSL_atomic_add
,.-
OPENSSL_atomic_add
.
global
OPENSSL_rdtsc
.
global
OPENSSL_rdtick
.
align
32
OPENSSL_rdtick
:
subcc
%
g0
,
1
,%
o0
.
word
0x91408000
!
rd
%
ccr
,%
o0
cmp
%
o0
,
0x99
bne
.
not
sc
bne
.
not
ick
xor
%
o0
,%
o0
,%
o0
save
%
sp
,
FRAME
-
16
,%
sp
mov
513
,%
o0
!
SI_PLATFORM
add
%
sp
,
BIAS
+
16
,%
o1
call
sysinfo
mov
256
,%
o2
add
%
sp
,
BIAS
-
16
,%
o1
ld
[%
o1
],%
l0
ld
[%
o1
+
4
],%
l1
ld
[%
o1
+
8
],%
l2
mov
%
lo
(
'SUNW'
),%
l3
ret
restore
.
notsc
:
.
word
0x91410000
!
rd
%
tick
,%
o0
retl
.
word
0x93323020
!
srlx
%
o2
,
32
,%
o1
.
notick
:
retl
xor
%
o1
,%
o1
,%
o1
.
type
OPENSSL_rdtick
,#
function
.
size
OPENSSL_rdtick
,.-
OPENSSL_rdtick
.
section
".
init
",#
alloc
,#
execinstr
call
OPENSSL_cpuid_setup
nop
.
type
OPENSSL_rdtsc
,#
function
.
size
OPENSSL_rdtsc
,.-
OPENSSL_atomic_add
crypto/sparcv9cap.c
0 → 100644
浏览文件 @
c06b0f3d
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/time.h>
#include <openssl/bn.h>
#define SPARCV9_TICK_PRIVILEGED (1<<0)
#define SPARCV9_PREFER_FPU (1<<1)
#define SPARCV9_VIS1 (1<<2)
#define SPARCV9_VIS2 (1<<3)
/* reserved */
#define SPARCV9_FMADD (1<<4)
/* reserved for SPARC64 V */
static
int
OPENSSL_sparcv9cap_P
=
SPARCV9_TICK_PRIVILEGED
;
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
)
{
int
bn_mul_mont_fpu
(
BN_ULONG
*
rp
,
const
BN_ULONG
*
ap
,
const
BN_ULONG
*
bp
,
const
BN_ULONG
*
np
,
const
BN_ULONG
*
n0
,
int
num
);
int
bn_mul_mont_int
(
BN_ULONG
*
rp
,
const
BN_ULONG
*
ap
,
const
BN_ULONG
*
bp
,
const
BN_ULONG
*
np
,
const
BN_ULONG
*
n0
,
int
num
);
if
(
OPENSSL_sparcv9cap_P
&
(
SPARCV9_PREFER_FPU
|
SPARCV9_VIS1
)
==
(
SPARCV9_PREFER_FPU
|
SPARCV9_VIS1
))
return
bn_mul_mont_fpu
(
rp
,
ap
,
bp
,
np
,
n0
,
num
);
else
return
bn_mul_mont_int
(
rp
,
ap
,
bp
,
np
,
n0
,
num
);
}
unsigned
long
OPENSSL_rdtsc
(
void
)
{
unsigned
long
OPENSSL_rdtick
(
void
);
if
(
OPENSSL_sparcv9cap_P
&
SPARCV9_TICK_PRIVILEGED
)
#if defined(__sun) && defined(__SVR4)
return
gethrtime
();
#else
return
0
;
#endif
else
return
OPENSSL_rdtick
();
}
#if defined(__sun) && defined(__SVR4)
#include <dlfcn.h>
#include <libdevinfo.h>
typedef
di_node_t
(
*
di_init_t
)(
const
char
*
,
uint_t
);
typedef
void
(
*
di_fini_t
)(
di_node_t
);
typedef
char
*
(
*
di_node_name_t
)(
di_node_t
);
typedef
int
(
*
di_walk_node_t
)(
di_node_t
,
uint_t
,
di_node_name_t
,
int
(
*
)(
di_node_t
,
di_node_name_t
));
#define DLLINK(h,name) (name=(name##_t)dlsym((h),#name))
static
int
walk_nodename
(
di_node_t
node
,
di_node_name_t
di_node_name
)
{
char
*
name
=
(
*
di_node_name
)(
node
);
/* This is expected to catch all UltraSPARC flavors prior T1 */
if
(
!
strcmp
(
name
,
"SUNW,UltraSPARC"
)
||
!
strncmp
(
name
,
"SUNW,UltraSPARC-I"
,
17
))
{
OPENSSL_sparcv9cap_P
|=
SPARCV9_PREFER_FPU
|
SPARCV9_VIS1
;
/* %tick is privileged only on UltraSPARC-I/II */
if
(
name
[
14
]
!=
'\0'
&&
name
[
17
]
!=
'\0'
&&
name
[
18
]
!=
'\0'
)
OPENSSL_sparcv9cap_P
&=
~
SPARCV9_TICK_PRIVILEGED
;
return
DI_WALK_TERMINATE
;
}
/* This is expected to catch remaining UltraSPARC T1 */
else
if
(
!
strncmp
(
name
,
"SUNW,UltraSPARC"
,
15
))
{
OPENSSL_sparcv9cap_P
|=
SPARCV9_VIS1
;
OPENSSL_sparcv9cap_P
&=
~
SPARCV9_TICK_PRIVILEGED
;
}
return
DI_WALK_CONTINUE
;
}
void
OPENSSL_cpuid_setup
(
void
)
{
void
*
h
;
char
*
e
;
if
(
e
=
getenv
(
"OPENSSL_sparcv9cap"
))
{
OPENSSL_sparcv9cap_P
=
strtoul
(
e
,
NULL
,
0
);
return
;
}
if
(
h
=
dlopen
(
"libdevinfo.so.1"
,
RTLD_LAZY
))
do
{
di_init_t
di_init
;
di_fini_t
di_fini
;
di_walk_node_t
di_walk_node
;
di_node_name_t
di_node_name
;
di_node_t
root_node
;
if
(
!
DLLINK
(
h
,
di_init
))
break
;
if
(
!
DLLINK
(
h
,
di_fini
))
break
;
if
(
!
DLLINK
(
h
,
di_walk_node
))
break
;
if
(
!
DLLINK
(
h
,
di_node_name
))
break
;
if
((
root_node
=
(
*
di_init
)(
"/"
,
DINFOSUBTREE
))
!=
DI_NODE_NIL
)
{
(
*
di_walk_node
)(
root_node
,
DI_WALK_SIBFIRST
,
di_node_name
,
walk_nodename
);
(
*
di_fini
)(
root_node
);
}
}
while
(
0
);
if
(
h
)
dlclose
(
h
);
}
#elif defined(__linux)
void
OPENSSL_cpuid_setup
(
void
)
{
char
*
e
;
if
(
e
=
getenv
(
"OPENSSL_sparcv9cap"
))
{
OPENSSL_sparcv9cap_P
=
strtoul
(
env
,
NULL
,
0
);
return
;
}
/* Linux apparently supports UltraSPARC-I/II/III only */
OPENSSL_sparcv9cap_P
|=
SPARCV9_PREFER_FPU
|
SPARCV9_VIS1
;
}
#else
void
OPENSSL_cpuid_setup
(
void
)
{}
#endif
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录