Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
btwise
openssl
提交
1c7f8707
O
openssl
项目概览
btwise
/
openssl
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
O
openssl
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
1c7f8707
编写于
6月 20, 2007
作者:
A
Andy Polyakov
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
bn_asm for s390x.
上级
a21c46e7
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
678 addition
and
0 deletion
+678
-0
crypto/bn/asm/s390x.S
crypto/bn/asm/s390x.S
+678
-0
未找到文件。
crypto/bn/asm/s390x.S
0 → 100755
浏览文件 @
1c7f8707
.
ident
"
s390x.S
,
version
1
.0
"
//
===================================================================
=
//
Written
by
Andy
Polyakov
<
appro
@
fy
.
chalmers
.
se
>
for
the
OpenSSL
//
project
.
//
//
Rights
for
redistribution
and
usage
in
source
and
binary
forms
are
//
granted
according
to
the
OpenSSL
license
.
Warranty
of
any
kind
is
//
disclaimed
.
//
===================================================================
=
.
text
#define zero %r0
//
BN_ULONG
bn_mul_add_words
(
BN_ULONG
*
r2
,
BN_ULONG
*
r3
,
int
r4
,
BN_ULONG
r5
)
;
.
globl
bn_mul_add_words
.
type
bn_mul_add_words
,@
function
.
align
4
bn_mul_add_words
:
lghi
zero
,
0
//
zero
=
0
la
%
r1
,
0
(%
r2
)
//
put
rp
aside
lghi
%
r2
,
0
//
i
=
0
;
ltgfr
%
r4
,%
r4
bler
%
r14
//
if
(
len
<=
0
)
return
0
;
stmg
%
r6
,%
r10
,
48
(%
r15
)
lghi
%
r8
,
0
//
carry
=
0
srag
%
r10
,%
r4
,
2
//
cnt
=
len
/
4
jz
.
Loop1_madd
.
Loop4_madd
:
lg
%
r7
,
0
(%
r2
,%
r3
)
//
ap
[
i
]
mlgr
%
r6
,%
r5
//
*=
w
algr
%
r7
,%
r8
//
+=
carry
alcgr
%
r6
,
zero
alg
%
r7
,
0
(%
r2
,%
r1
)
//
+=
rp
[
i
]
alcgr
%
r6
,
zero
stg
%
r7
,
0
(%
r2
,%
r1
)
//
rp
[
i
]=
lg
%
r9
,
8
(%
r2
,%
r3
)
mlgr
%
r8
,%
r5
algr
%
r9
,%
r6
alcgr
%
r8
,
zero
alg
%
r9
,
8
(%
r2
,%
r1
)
alcgr
%
r8
,
zero
stg
%
r9
,
8
(%
r2
,%
r1
)
lg
%
r7
,
16
(%
r2
,%
r3
)
mlgr
%
r6
,%
r5
algr
%
r7
,%
r8
alcgr
%
r6
,
zero
alg
%
r7
,
16
(%
r2
,%
r1
)
alcgr
%
r6
,
zero
stg
%
r7
,
16
(%
r2
,%
r1
)
lg
%
r9
,
24
(%
r2
,%
r3
)
mlgr
%
r8
,%
r5
algr
%
r9
,%
r6
alcgr
%
r8
,
zero
alg
%
r9
,
24
(%
r2
,%
r1
)
alcgr
%
r8
,
zero
stg
%
r9
,
24
(%
r2
,%
r1
)
la
%
r2
,
32
(%
r2
)
//
i
+=
4
brct
%
r10
,
.
Loop4_madd
lghi
%
r10
,
3
nr
%
r4
,%
r10
//
cnt
=
len
%4
jz
.
Lend_madd
.
Loop1_madd
:
lg
%
r7
,
0
(%
r2
,%
r3
)
//
ap
[
i
]
mlgr
%
r6
,%
r5
//
*=
w
algr
%
r7
,%
r8
//
+=
carry
alcgr
%
r6
,
zero
alg
%
r7
,
0
(%
r2
,%
r1
)
//
+=
rp
[
i
]
alcgr
%
r6
,
zero
stg
%
r7
,
0
(%
r2
,%
r1
)
//
rp
[
i
]=
lgr
%
r8
,%
r6
la
%
r2
,
8
(%
r2
)
//
i
++
brct
%
r4
,
.
Loop1_madd
.
Lend_madd
:
lgr
%
r2
,%
r8
lmg
%
r6
,%
r10
,
48
(%
r15
)
br
%
r14
.
size
bn_mul_add_words
,.-
bn_mul_add_words
//
BN_ULONG
bn_mul_words
(
BN_ULONG
*
r2
,
BN_ULONG
*
r3
,
int
r4
,
BN_ULONG
r5
)
;
.
globl
bn_mul_words
.
type
bn_mul_words
,@
function
.
align
4
bn_mul_words
:
lghi
zero
,
0
//
zero
=
0
la
%
r1
,
0
(%
r2
)
//
put
rp
aside
lghi
%
r2
,
0
//
i
=
0
;
ltgfr
%
r4
,%
r4
bler
%
r14
//
if
(
len
<=
0
)
return
0
;
stmg
%
r6
,%
r10
,
48
(%
r15
)
lghi
%
r8
,
0
//
carry
=
0
srag
%
r10
,%
r4
,
2
//
cnt
=
len
/
4
jz
.
Loop1_mul
.
Loop4_mul
:
lg
%
r7
,
0
(%
r2
,%
r3
)
//
ap
[
i
]
mlgr
%
r6
,%
r5
//
*=
w
algr
%
r7
,%
r8
//
+=
carry
alcgr
%
r6
,
zero
stg
%
r7
,
0
(%
r2
,%
r1
)
//
rp
[
i
]=
lg
%
r9
,
8
(%
r2
,%
r3
)
mlgr
%
r8
,%
r5
algr
%
r9
,%
r6
alcgr
%
r8
,
zero
stg
%
r9
,
8
(%
r2
,%
r1
)
lg
%
r7
,
16
(%
r2
,%
r3
)
mlgr
%
r6
,%
r5
algr
%
r7
,%
r8
alcgr
%
r6
,
zero
stg
%
r7
,
16
(%
r2
,%
r1
)
lg
%
r9
,
24
(%
r2
,%
r3
)
mlgr
%
r8
,%
r5
algr
%
r9
,%
r6
alcgr
%
r8
,
zero
stg
%
r9
,
24
(%
r2
,%
r1
)
la
%
r2
,
32
(%
r2
)
//
i
+=
4
brct
%
r10
,
.
Loop4_mul
lghi
%
r10
,
3
nr
%
r4
,%
r10
//
cnt
=
len
%4
jz
.
Lend_mul
.
Loop1_mul
:
lg
%
r7
,
0
(%
r2
,%
r3
)
//
ap
[
i
]
mlgr
%
r6
,%
r5
//
*=
w
algr
%
r7
,%
r8
//
+=
carry
alcgr
%
r6
,
zero
stg
%
r7
,
0
(%
r2
,%
r1
)
//
rp
[
i
]=
lgr
%
r8
,%
r6
la
%
r2
,
8
(%
r2
)
//
i
++
brct
%
r4
,
.
Loop1_mul
.
Lend_mul
:
lgr
%
r2
,%
r8
lmg
%
r6
,%
r10
,
48
(%
r15
)
br
%
r14
.
size
bn_mul_words
,.-
bn_mul_words
//
void
bn_sqr_words
(
BN_ULONG
*
r2
,
BN_ULONG
*
r2
,
int
r4
)
.
globl
bn_sqr_words
.
type
bn_sqr_words
,@
function
.
align
4
bn_sqr_words
:
ltgfr
%
r4
,%
r4
bler
%
r14
stmg
%
r6
,%
r7
,
48
(%
r15
)
srag
%
r1
,%
r4
,
2
//
cnt
=
len
/
4
jz
.
Loop1_sqr
.
Loop4_sqr
:
lg
%
r7
,
0
(%
r3
)
mlgr
%
r6
,%
r7
stg
%
r7
,
0
(%
r2
)
stg
%
r6
,
8
(%
r2
)
lg
%
r7
,
8
(%
r3
)
mlgr
%
r6
,%
r7
stg
%
r7
,
16
(%
r2
)
stg
%
r6
,
24
(%
r2
)
lg
%
r7
,
16
(%
r3
)
mlgr
%
r6
,%
r7
stg
%
r7
,
32
(%
r2
)
stg
%
r6
,
40
(%
r2
)
lg
%
r7
,
24
(%
r3
)
mlgr
%
r6
,%
r7
stg
%
r7
,
48
(%
r2
)
stg
%
r6
,
56
(%
r2
)
la
%
r3
,
32
(%
r3
)
la
%
r2
,
64
(%
r2
)
brct
%
r1
,
.
Loop4_sqr
lghi
%
r1
,
3
nr
%
r4
,%
r1
//
cnt
=
len
%4
jz
.
Lend_sqr
.
Loop1_sqr
:
lg
%
r7
,
0
(%
r3
)
mlgr
%
r6
,%
r7
stg
%
r7
,
0
(%
r2
)
stg
%
r6
,
8
(%
r2
)
la
%
r3
,
8
(%
r3
)
la
%
r2
,
16
(%
r2
)
brct
%
r4
,
.
Loop1_sqr
.
Lend_sqr
:
lmg
%
r6
,%
r7
,
48
(%
r15
)
br
%
r14
.
size
bn_sqr_words
,.-
bn_sqr_words
//
BN_ULONG
bn_div_words
(
BN_ULONG
h
,
BN_ULONG
l
,
BN_ULONG
d
)
;
.
globl
bn_div_words
.
type
bn_div_words
,@
function
.
align
4
bn_div_words
:
dlgr
%
r2
,%
r4
lgr
%
r2
,%
r3
br
%
r14
.
size
bn_div_words
,.-
bn_div_words
//
BN_ULONG
bn_add_words
(
BN_ULONG
*
r2
,
BN_ULONG
*
r3
,
BN_ULONG
*
r4
,
int
r5
)
;
.
globl
bn_add_words
.
type
bn_add_words
,@
function
.
align
4
bn_add_words
:
la
%
r1
,
0
(%
r2
)
//
put
rp
aside
lghi
%
r2
,
0
//
i
=
0
ltgfr
%
r5
,%
r5
bler
%
r14
//
if
(
len
<=
0
)
return
0
;
stg
%
r6
,
48
(%
r15
)
lghi
%
r6
,
3
nr
%
r6
,%
r5
//
len
%4
sra
%
r5
,
2
//
len
/
4
,
use
sra
because
it
sets
condition
code
jz
.
Loop1_add
//
carry
is
incidentally
cleared
if
branch
taken
algr
%
r2
,%
r2
//
clear
carry
.
Loop4_add
:
lg
%
r0
,
0
(%
r2
,%
r3
)
alcg
%
r0
,
0
(%
r2
,%
r4
)
stg
%
r0
,
0
(%
r2
,%
r1
)
lg
%
r0
,
8
(%
r2
,%
r3
)
alcg
%
r0
,
8
(%
r2
,%
r4
)
stg
%
r0
,
8
(%
r2
,%
r1
)
lg
%
r0
,
16
(%
r2
,%
r3
)
alcg
%
r0
,
16
(%
r2
,%
r4
)
stg
%
r0
,
16
(%
r2
,%
r1
)
lg
%
r0
,
24
(%
r2
,%
r3
)
alcg
%
r0
,
24
(%
r2
,%
r4
)
stg
%
r0
,
24
(%
r2
,%
r1
)
la
%
r2
,
32
(%
r2
)
//
i
+=
4
brct
%
r5
,
.
Loop4_add
la
%
r6
,
1
(%
r6
)
//
see
if
len
%4
is
zero
...
brct
%
r6
,
.
Loop1_add
//
without
touching
condition
code
:
-)
.
Lexit_add
:
lghi
%
r2
,
0
alcgr
%
r2
,%
r2
lg
%
r6
,
48
(%
r15
)
br
%
r14
.
Loop1_add
:
lg
%
r0
,
0
(%
r2
,%
r3
)
alcg
%
r0
,
0
(%
r2
,%
r4
)
stg
%
r0
,
0
(%
r2
,%
r1
)
la
%
r2
,
8
(%
r2
)
//
i
++
brct
%
r6
,
.
Loop1_add
j
.
Lexit_add
.
size
bn_add_words
,.-
bn_add_words
//
BN_ULONG
bn_sub_words
(
BN_ULONG
*
r2
,
BN_ULONG
*
r3
,
BN_ULONG
*
r4
,
int
r5
)
;
.
globl
bn_sub_words
.
type
bn_sub_words
,@
function
.
align
4
bn_sub_words
:
la
%
r1
,
0
(%
r2
)
//
put
rp
aside
lghi
%
r2
,
0
//
i
=
0
ltgfr
%
r5
,%
r5
bler
%
r14
//
if
(
len
<=
0
)
return
0
;
stg
%
r6
,
48
(%
r15
)
lghi
%
r6
,
3
nr
%
r6
,%
r5
//
len
%4
sra
%
r5
,
2
//
len
/
4
,
use
sra
because
it
sets
condition
code
jnz
.
Loop4_sub
//
borrow
is
incidentally
cleared
if
branch
taken
slgr
%
r2
,%
r2
//
clear
borrow
.
Loop1_sub
:
lg
%
r0
,
0
(%
r2
,%
r3
)
slbg
%
r0
,
0
(%
r2
,%
r4
)
stg
%
r0
,
0
(%
r2
,%
r1
)
la
%
r2
,
8
(%
r2
)
//
i
++
brct
%
r6
,
.
Loop1_sub
j
.
Lexit_sub
.
Loop4_sub
:
lg
%
r0
,
0
(%
r2
,%
r3
)
slbg
%
r0
,
0
(%
r2
,%
r4
)
stg
%
r0
,
0
(%
r2
,%
r1
)
lg
%
r0
,
8
(%
r2
,%
r3
)
slbg
%
r0
,
8
(%
r2
,%
r4
)
stg
%
r0
,
8
(%
r2
,%
r1
)
lg
%
r0
,
16
(%
r2
,%
r3
)
slbg
%
r0
,
16
(%
r2
,%
r4
)
stg
%
r0
,
16
(%
r2
,%
r1
)
lg
%
r0
,
24
(%
r2
,%
r3
)
slbg
%
r0
,
24
(%
r2
,%
r4
)
stg
%
r0
,
24
(%
r2
,%
r1
)
la
%
r2
,
32
(%
r2
)
//
i
+=
4
brct
%
r5
,
.
Loop4_sub
la
%
r6
,
1
(%
r6
)
//
see
if
len
%4
is
zero
...
brct
%
r6
,
.
Loop1_sub
//
without
touching
condition
code
:
-)
.
Lexit_sub
:
lghi
%
r2
,
0
slbgr
%
r2
,%
r2
lcgr
%
r2
,%
r2
lg
%
r6
,
48
(%
r15
)
br
%
r14
.
size
bn_sub_words
,.-
bn_sub_words
#define c1 %r1
#define c2 %r5
#define c3 %r8
#define mul_add_c(ai,bi,c1,c2,c3) \
lg
%
r7
,
ai
*
8
(%
r3
)
; \
mlg
%
r6
,
bi
*
8
(%
r4
)
; \
algr
c1
,%
r7
; \
alcgr
c2
,%
r6
; \
alcgr
c3
,
zero
//
void
bn_mul_comba8
(
BN_ULONG
*
r2
,
BN_ULONG
*
r3
,
BN_ULONG
*
r4
)
;
.
globl
bn_mul_comba8
.
type
bn_mul_comba8
,@
function
.
align
4
bn_mul_comba8
:
stmg
%
r6
,%
r8
,
48
(%
r15
)
lghi
c1
,
0
lghi
c2
,
0
lghi
c3
,
0
lghi
zero
,
0
mul_add_c
(0,0,
c1
,
c2
,
c3
)
;
stg
c1
,
0
*
8
(%
r2
)
lghi
c1
,
0
mul_add_c
(0,1,
c2
,
c3
,
c1
)
;
mul_add_c
(1,0,
c2
,
c3
,
c1
)
;
stg
c2
,
1
*
8
(%
r2
)
lghi
c2
,
0
mul_add_c
(2,0,
c3
,
c1
,
c2
)
;
mul_add_c
(1,1,
c3
,
c1
,
c2
)
;
mul_add_c
(0,2,
c3
,
c1
,
c2
)
;
stg
c3
,
2
*
8
(%
r2
)
lghi
c3
,
0
mul_add_c
(0,3,
c1
,
c2
,
c3
)
;
mul_add_c
(1,2,
c1
,
c2
,
c3
)
;
mul_add_c
(2,1,
c1
,
c2
,
c3
)
;
mul_add_c
(3,0,
c1
,
c2
,
c3
)
;
stg
c1
,
3
*
8
(%
r2
)
lghi
c1
,
0
mul_add_c
(4,0,
c2
,
c3
,
c1
)
;
mul_add_c
(3,1,
c2
,
c3
,
c1
)
;
mul_add_c
(2,2,
c2
,
c3
,
c1
)
;
mul_add_c
(1,3,
c2
,
c3
,
c1
)
;
mul_add_c
(0,4,
c2
,
c3
,
c1
)
;
stg
c2
,
4
*
8
(%
r2
)
lghi
c2
,
0
mul_add_c
(0,5,
c3
,
c1
,
c2
)
;
mul_add_c
(1,4,
c3
,
c1
,
c2
)
;
mul_add_c
(2,3,
c3
,
c1
,
c2
)
;
mul_add_c
(3,2,
c3
,
c1
,
c2
)
;
mul_add_c
(4,1,
c3
,
c1
,
c2
)
;
mul_add_c
(5,0,
c3
,
c1
,
c2
)
;
stg
c3
,
5
*
8
(%
r2
)
lghi
c3
,
0
mul_add_c
(6,0,
c1
,
c2
,
c3
)
;
mul_add_c
(5,1,
c1
,
c2
,
c3
)
;
mul_add_c
(4,2,
c1
,
c2
,
c3
)
;
mul_add_c
(3,3,
c1
,
c2
,
c3
)
;
mul_add_c
(2,4,
c1
,
c2
,
c3
)
;
mul_add_c
(1,5,
c1
,
c2
,
c3
)
;
mul_add_c
(0,6,
c1
,
c2
,
c3
)
;
stg
c1
,
6
*
8
(%
r2
)
lghi
c1
,
0
mul_add_c
(0,7,
c2
,
c3
,
c1
)
;
mul_add_c
(1,6,
c2
,
c3
,
c1
)
;
mul_add_c
(2,5,
c2
,
c3
,
c1
)
;
mul_add_c
(3,4,
c2
,
c3
,
c1
)
;
mul_add_c
(4,3,
c2
,
c3
,
c1
)
;
mul_add_c
(5,2,
c2
,
c3
,
c1
)
;
mul_add_c
(6,1,
c2
,
c3
,
c1
)
;
mul_add_c
(7,0,
c2
,
c3
,
c1
)
;
stg
c2
,
7
*
8
(%
r2
)
lghi
c2
,
0
mul_add_c
(7,1,
c3
,
c1
,
c2
)
;
mul_add_c
(6,2,
c3
,
c1
,
c2
)
;
mul_add_c
(5,3,
c3
,
c1
,
c2
)
;
mul_add_c
(4,4,
c3
,
c1
,
c2
)
;
mul_add_c
(3,5,
c3
,
c1
,
c2
)
;
mul_add_c
(2,6,
c3
,
c1
,
c2
)
;
mul_add_c
(1,7,
c3
,
c1
,
c2
)
;
stg
c3
,
8
*
8
(%
r2
)
lghi
c3
,
0
mul_add_c
(2,7,
c1
,
c2
,
c3
)
;
mul_add_c
(3,6,
c1
,
c2
,
c3
)
;
mul_add_c
(4,5,
c1
,
c2
,
c3
)
;
mul_add_c
(5,4,
c1
,
c2
,
c3
)
;
mul_add_c
(6,3,
c1
,
c2
,
c3
)
;
mul_add_c
(7,2,
c1
,
c2
,
c3
)
;
stg
c1
,
9
*
8
(%
r2
)
lghi
c1
,
0
mul_add_c
(7,3,
c2
,
c3
,
c1
)
;
mul_add_c
(6,4,
c2
,
c3
,
c1
)
;
mul_add_c
(5,5,
c2
,
c3
,
c1
)
;
mul_add_c
(4,6,
c2
,
c3
,
c1
)
;
mul_add_c
(3,7,
c2
,
c3
,
c1
)
;
stg
c2
,
10
*
8
(%
r2
)
lghi
c2
,
0
mul_add_c
(4,7,
c3
,
c1
,
c2
)
;
mul_add_c
(5,6,
c3
,
c1
,
c2
)
;
mul_add_c
(6,5,
c3
,
c1
,
c2
)
;
mul_add_c
(7,4,
c3
,
c1
,
c2
)
;
stg
c3
,
11
*
8
(%
r2
)
lghi
c3
,
0
mul_add_c
(7,5,
c1
,
c2
,
c3
)
;
mul_add_c
(6,6,
c1
,
c2
,
c3
)
;
mul_add_c
(5,7,
c1
,
c2
,
c3
)
;
stg
c1
,
12
*
8
(%
r2
)
lghi
c1
,
0
mul_add_c
(6,7,
c2
,
c3
,
c1
)
;
mul_add_c
(7,6,
c2
,
c3
,
c1
)
;
stg
c2
,
13
*
8
(%
r2
)
lghi
c2
,
0
mul_add_c
(7,7,
c3
,
c1
,
c2
)
;
stg
c3
,
14
*
8
(%
r2
)
stg
c1
,
15
*
8
(%
r2
)
lmg
%
r6
,%
r8
,
48
(%
r15
)
br
%
r14
.
size
bn_mul_comba8
,.-
bn_mul_comba8
//
void
bn_mul_comba4
(
BN_ULONG
*
r2
,
BN_ULONG
*
r3
,
BN_ULONG
*
r4
)
;
.
globl
bn_mul_comba4
.
type
bn_mul_comba4
,@
function
.
align
4
bn_mul_comba4
:
stmg
%
r6
,%
r8
,
48
(%
r15
)
lghi
c1
,
0
lghi
c2
,
0
lghi
c3
,
0
lghi
zero
,
0
mul_add_c
(0,0,
c1
,
c2
,
c3
)
;
stg
c1
,
0
*
8
(%
r3
)
lghi
c1
,
0
mul_add_c
(0,1,
c2
,
c3
,
c1
)
;
mul_add_c
(1,0,
c2
,
c3
,
c1
)
;
stg
c2
,
1
*
8
(%
r2
)
lghi
c2
,
0
mul_add_c
(2,0,
c3
,
c1
,
c2
)
;
mul_add_c
(1,1,
c3
,
c1
,
c2
)
;
mul_add_c
(0,2,
c3
,
c1
,
c2
)
;
stg
c3
,
2
*
8
(%
r2
)
lghi
c3
,
0
mul_add_c
(0,3,
c1
,
c2
,
c3
)
;
mul_add_c
(1,2,
c1
,
c2
,
c3
)
;
mul_add_c
(2,1,
c1
,
c2
,
c3
)
;
mul_add_c
(3,0,
c1
,
c2
,
c3
)
;
stg
c1
,
3
*
8
(%
r2
)
lghi
c1
,
0
mul_add_c
(3,1,
c2
,
c3
,
c1
)
;
mul_add_c
(2,2,
c2
,
c3
,
c1
)
;
mul_add_c
(1,3,
c2
,
c3
,
c1
)
;
stg
c2
,
4
*
8
(%
r2
)
lghi
c2
,
0
mul_add_c
(2,3,
c3
,
c1
,
c2
)
;
mul_add_c
(3,2,
c3
,
c1
,
c2
)
;
stg
c3
,
5
*
8
(%
r2
)
lghi
c3
,
0
mul_add_c
(3,3,
c1
,
c2
,
c3
)
;
stg
c1
,
6
*
8
(%
r2
)
stg
c2
,
7
*
8
(%
r2
)
stmg
%
r6
,%
r8
,
48
(%
r15
)
br
%
r14
.
size
bn_mul_comba4
,.-
bn_mul_comba4
#define sqr_add_c(ai,c1,c2,c3) \
lg
%
r7
,
ai
*
8
(%
r3
)
; \
mlgr
%
r6
,%
r7
; \
algr
c1
,%
r7
; \
alcgr
c2
,%
r6
; \
alcgr
c3
,
zero
#define sqr_add_c2(ai,aj,c1,c2,c3) \
lg
%
r7
,
ai
*
8
(%
r3
)
; \
mlg
%
r6
,
aj
*
8
(%
r3
)
; \
algr
c1
,%
r7
; \
alcgr
c2
,%
r6
; \
alcgr
c3
,
zero
; \
algr
c1
,%
r7
; \
alcgr
c2
,%
r6
; \
alcgr
c3
,
zero
//
void
bn_sqr_comba8
(
BN_ULONG
*
r2
,
BN_ULONG
*
r3
)
;
.
globl
bn_sqr_comba8
.
type
bn_sqr_comba8
,@
function
.
align
4
bn_sqr_comba8
:
stmg
%
r6
,%
r8
,
48
(%
r15
)
lghi
c1
,
0
lghi
c2
,
0
lghi
c3
,
0
lghi
zero
,
0
sqr_add_c
(0,
c1
,
c2
,
c3
)
;
stg
c1
,
0
*
8
(%
r2
)
lghi
c1
,
0
sqr_add_c2
(1,0,
c2
,
c3
,
c1
)
;
stg
c2
,
1
*
8
(%
r2
)
lghi
c2
,
0
sqr_add_c
(1,
c3
,
c1
,
c2
)
;
sqr_add_c2
(2,0,
c3
,
c1
,
c2
)
;
stg
c3
,
2
*
8
(%
r2
)
lghi
c3
,
0
sqr_add_c2
(3,0,
c1
,
c2
,
c3
)
;
sqr_add_c2
(2,1,
c1
,
c2
,
c3
)
;
stg
c1
,
3
*
8
(%
r2
)
lghi
c1
,
0
sqr_add_c
(2,
c2
,
c3
,
c1
)
;
sqr_add_c2
(3,1,
c2
,
c3
,
c1
)
;
sqr_add_c2
(4,0,
c2
,
c3
,
c1
)
;
stg
c2
,
4
*
8
(%
r2
)
lghi
c2
,
0
sqr_add_c2
(5,0,
c3
,
c1
,
c2
)
;
sqr_add_c2
(4,1,
c3
,
c1
,
c2
)
;
sqr_add_c2
(3,2,
c3
,
c1
,
c2
)
;
stg
c3
,
5
*
8
(%
r2
)
lghi
c3
,
0
sqr_add_c
(3,
c1
,
c2
,
c3
)
;
sqr_add_c2
(4,2,
c1
,
c2
,
c3
)
;
sqr_add_c2
(5,1,
c1
,
c2
,
c3
)
;
sqr_add_c2
(6,0,
c1
,
c2
,
c3
)
;
stg
c1
,
6
*
8
(%
r2
)
lghi
c1
,
0
sqr_add_c2
(7,0,
c2
,
c3
,
c1
)
;
sqr_add_c2
(6,1,
c2
,
c3
,
c1
)
;
sqr_add_c2
(5,2,
c2
,
c3
,
c1
)
;
sqr_add_c2
(4,3,
c2
,
c3
,
c1
)
;
stg
c2
,
7
*
8
(%
r2
)
lghi
c2
,
0
sqr_add_c
(4,
c3
,
c1
,
c2
)
;
sqr_add_c2
(5,3,
c3
,
c1
,
c2
)
;
sqr_add_c2
(6,2,
c3
,
c1
,
c2
)
;
sqr_add_c2
(7,1,
c3
,
c1
,
c2
)
;
stg
c3
,
8
*
8
(%
r2
)
lghi
c3
,
0
sqr_add_c2
(7,2,
c1
,
c2
,
c3
)
;
sqr_add_c2
(6,3,
c1
,
c2
,
c3
)
;
sqr_add_c2
(5,4,
c1
,
c2
,
c3
)
;
stg
c1
,
9
*
8
(%
r2
)
lghi
c1
,
0
sqr_add_c
(5,
c2
,
c3
,
c1
)
;
sqr_add_c2
(6,4,
c2
,
c3
,
c1
)
;
sqr_add_c2
(7,3,
c2
,
c3
,
c1
)
;
stg
c2
,
10
*
8
(%
r2
)
lghi
c2
,
0
sqr_add_c2
(7,4,
c3
,
c1
,
c2
)
;
sqr_add_c2
(6,5,
c3
,
c1
,
c2
)
;
stg
c3
,
11
*
8
(%
r2
)
lghi
c3
,
0
sqr_add_c
(6,
c1
,
c2
,
c3
)
;
sqr_add_c2
(7,5,
c1
,
c2
,
c3
)
;
stg
c1
,
12
*
8
(%
r2
)
lghi
c1
,
0
sqr_add_c2
(7,6,
c2
,
c3
,
c1
)
;
stg
c2
,
13
*
8
(%
r2
)
lghi
c2
,
0
sqr_add_c
(7,
c3
,
c1
,
c2
)
;
stg
c3
,
14
*
8
(%
r2
)
stg
c1
,
15
*
8
(%
r2
)
lmg
%
r6
,%
r8
,
48
(%
r15
)
br
%
r14
.
size
bn_sqr_comba8
,.-
bn_sqr_comba8
//
void
bn_sqr_comba4
(
BN_ULONG
*
r2
,
BN_ULONG
*
r3
)
;
.
globl
bn_sqr_comba4
.
type
bn_sqr_comba4
,@
function
.
align
4
bn_sqr_comba4
:
stmg
%
r6
,%
r8
,
48
(%
r15
)
lghi
c1
,
0
lghi
c2
,
0
lghi
c3
,
0
lghi
zero
,
0
sqr_add_c
(0,
c1
,
c2
,
c3
)
;
stg
c1
,
0
*
8
(%
r2
)
lghi
c1
,
0
sqr_add_c2
(1,0,
c2
,
c3
,
c1
)
;
stg
c2
,
1
*
8
(%
r2
)
lghi
c2
,
0
sqr_add_c
(1,
c3
,
c1
,
c2
)
;
sqr_add_c2
(2,0,
c3
,
c1
,
c2
)
;
stg
c3
,
2
*
8
(%
r2
)
lghi
c3
,
0
sqr_add_c2
(3,0,
c1
,
c2
,
c3
)
;
sqr_add_c2
(2,1,
c1
,
c2
,
c3
)
;
stg
c1
,
3
*
8
(%
r2
)
lghi
c1
,
0
sqr_add_c
(2,
c2
,
c3
,
c1
)
;
sqr_add_c2
(3,1,
c2
,
c3
,
c1
)
;
stg
c2
,
4
*
8
(%
r2
)
lghi
c2
,
0
sqr_add_c2
(3,2,
c3
,
c1
,
c2
)
;
stg
c3
,
5
*
8
(%
r2
)
lghi
c3
,
0
sqr_add_c
(3,
c1
,
c2
,
c3
)
;
stg
c1
,
6
*
8
(%
r2
)
stg
c2
,
7
*
8
(%
r2
)
lmg
%
r6
,%
r8
,
48
(%
r15
)
br
%
r14
.
size
bn_sqr_comba4
,.-
bn_sqr_comba4
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录