mirror of
https://github.com/guanzhi/GmSSL.git
synced 2026-08-06 11:53:39 +08:00
Add .note.GNU-stack section declarations to hand-written assembly sources so ELF builds do not produce executables or libraries with an executable stack. These assembly implementations do not require an executable stack. Adding the marker restores normal non-executable stack/NX hardening. Signed-off-by: hrimfaxi <outmatch@gmail.com>
2145 lines
33 KiB
ArmAsm
2145 lines
33 KiB
ArmAsm
/*
|
|
* Copyright 2014-2024 The GmSSL Project. All Rights Reserved.
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the License); you may
|
|
* not use this file except in compliance with the License.
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*/
|
|
|
|
|
|
#include <gmssl/asm.h>
|
|
|
|
.text
|
|
|
|
|
|
|
|
.p2align 6
|
|
L$poly:
|
|
.quad 0xffffffffffffffff, 0xffffffff00000000, 0xffffffffffffffff, 0xfffffffeffffffff
|
|
|
|
|
|
L$RR:
|
|
.quad 0x0000000200000003, 0x00000002ffffffff, 0x0000000100000001, 0x0000000400000002
|
|
|
|
L$One:
|
|
.long 1,1,1,1,1,1,1,1
|
|
L$Two:
|
|
.long 2,2,2,2,2,2,2,2
|
|
L$Three:
|
|
.long 3,3,3,3,3,3,3,3
|
|
L$ONE_mont:
|
|
.quad 0x0000000000000001, 0x00000000ffffffff, 0x0000000000000000, 0x0000000100000000
|
|
|
|
.globl func(sm2_z256_modp_dbl)
|
|
|
|
.p2align 6
|
|
func(sm2_z256_modp_dbl):
|
|
pushq %r12
|
|
pushq %r13
|
|
|
|
movq 0(%rsi),%r8
|
|
xorq %r13,%r13
|
|
movq 8(%rsi),%r9
|
|
addq %r8,%r8
|
|
movq 16(%rsi),%r10
|
|
adcq %r9,%r9
|
|
movq 24(%rsi),%r11
|
|
leaq L$poly(%rip),%rsi
|
|
movq %r8,%rax
|
|
adcq %r10,%r10
|
|
adcq %r11,%r11
|
|
movq %r9,%rdx
|
|
adcq $0,%r13
|
|
|
|
subq 0(%rsi),%r8
|
|
movq %r10,%rcx
|
|
sbbq 8(%rsi),%r9
|
|
sbbq 16(%rsi),%r10
|
|
movq %r11,%r12
|
|
sbbq 24(%rsi),%r11
|
|
sbbq $0,%r13
|
|
|
|
cmovcq %rax,%r8
|
|
cmovcq %rdx,%r9
|
|
movq %r8,0(%rdi)
|
|
cmovcq %rcx,%r10
|
|
movq %r9,8(%rdi)
|
|
cmovcq %r12,%r11
|
|
movq %r10,16(%rdi)
|
|
movq %r11,24(%rdi)
|
|
|
|
popq %r13
|
|
popq %r12
|
|
.byte 0xf3,0xc3
|
|
|
|
|
|
|
|
|
|
.globl func(sm2_z256_modp_haf)
|
|
|
|
.p2align 5
|
|
func(sm2_z256_modp_haf):
|
|
pushq %r12
|
|
pushq %r13
|
|
|
|
movq 0(%rsi),%r8
|
|
movq 8(%rsi),%r9
|
|
movq 16(%rsi),%r10
|
|
movq %r8,%rax
|
|
movq 24(%rsi),%r11
|
|
leaq L$poly(%rip),%rsi
|
|
|
|
movq %r9,%rdx
|
|
xorq %r13,%r13
|
|
addq 0(%rsi),%r8
|
|
movq %r10,%rcx
|
|
adcq 8(%rsi),%r9
|
|
adcq 16(%rsi),%r10
|
|
movq %r11,%r12
|
|
adcq 24(%rsi),%r11
|
|
adcq $0,%r13
|
|
xorq %rsi,%rsi
|
|
testq $1,%rax
|
|
|
|
cmovzq %rax,%r8
|
|
cmovzq %rdx,%r9
|
|
cmovzq %rcx,%r10
|
|
cmovzq %r12,%r11
|
|
cmovzq %rsi,%r13
|
|
|
|
movq %r9,%rax
|
|
shrq $1,%r8
|
|
shlq $63,%rax
|
|
movq %r10,%rdx
|
|
shrq $1,%r9
|
|
orq %rax,%r8
|
|
shlq $63,%rdx
|
|
movq %r11,%rcx
|
|
shrq $1,%r10
|
|
orq %rdx,%r9
|
|
shlq $63,%rcx
|
|
shrq $1,%r11
|
|
shlq $63,%r13
|
|
orq %rcx,%r10
|
|
orq %r13,%r11
|
|
|
|
movq %r8,0(%rdi)
|
|
movq %r9,8(%rdi)
|
|
movq %r10,16(%rdi)
|
|
movq %r11,24(%rdi)
|
|
|
|
popq %r13
|
|
popq %r12
|
|
.byte 0xf3,0xc3
|
|
|
|
|
|
|
|
|
|
.globl func(sm2_z256_modp_tri)
|
|
|
|
.p2align 5
|
|
func(sm2_z256_modp_tri):
|
|
pushq %r12
|
|
pushq %r13
|
|
|
|
movq 0(%rsi),%r8
|
|
xorq %r13,%r13
|
|
movq 8(%rsi),%r9
|
|
addq %r8,%r8
|
|
movq 16(%rsi),%r10
|
|
adcq %r9,%r9
|
|
movq 24(%rsi),%r11
|
|
movq %r8,%rax
|
|
adcq %r10,%r10
|
|
adcq %r11,%r11
|
|
movq %r9,%rdx
|
|
adcq $0,%r13
|
|
|
|
subq L$poly+0(%rip),%r8
|
|
movq %r10,%rcx
|
|
sbbq L$poly+8(%rip),%r9
|
|
sbbq L$poly+16(%rip),%r10
|
|
movq %r11,%r12
|
|
sbbq L$poly+24(%rip),%r11
|
|
sbbq $0,%r13
|
|
|
|
cmovcq %rax,%r8
|
|
cmovcq %rdx,%r9
|
|
cmovcq %rcx,%r10
|
|
cmovcq %r12,%r11
|
|
|
|
xorq %r13,%r13
|
|
addq 0(%rsi),%r8
|
|
adcq 8(%rsi),%r9
|
|
movq %r8,%rax
|
|
adcq 16(%rsi),%r10
|
|
adcq 24(%rsi),%r11
|
|
movq %r9,%rdx
|
|
adcq $0,%r13
|
|
|
|
subq L$poly+0(%rip),%r8
|
|
movq %r10,%rcx
|
|
sbbq L$poly+8(%rip),%r9
|
|
sbbq L$poly+16(%rip),%r10
|
|
movq %r11,%r12
|
|
sbbq L$poly+24(%rip),%r11
|
|
sbbq $0,%r13
|
|
|
|
cmovcq %rax,%r8
|
|
cmovcq %rdx,%r9
|
|
movq %r8,0(%rdi)
|
|
cmovcq %rcx,%r10
|
|
movq %r9,8(%rdi)
|
|
cmovcq %r12,%r11
|
|
movq %r10,16(%rdi)
|
|
movq %r11,24(%rdi)
|
|
|
|
popq %r13
|
|
popq %r12
|
|
.byte 0xf3,0xc3
|
|
|
|
|
|
|
|
|
|
.globl func(sm2_z256_modp_add)
|
|
|
|
.p2align 5
|
|
func(sm2_z256_modp_add):
|
|
pushq %r12
|
|
pushq %r13
|
|
|
|
movq 0(%rsi),%r8
|
|
xorq %r13,%r13
|
|
movq 8(%rsi),%r9
|
|
movq 16(%rsi),%r10
|
|
movq 24(%rsi),%r11
|
|
leaq L$poly(%rip),%rsi
|
|
|
|
addq 0(%rdx),%r8
|
|
adcq 8(%rdx),%r9
|
|
movq %r8,%rax
|
|
adcq 16(%rdx),%r10
|
|
adcq 24(%rdx),%r11
|
|
movq %r9,%rdx
|
|
adcq $0,%r13
|
|
|
|
subq 0(%rsi),%r8
|
|
movq %r10,%rcx
|
|
sbbq 8(%rsi),%r9
|
|
sbbq 16(%rsi),%r10
|
|
movq %r11,%r12
|
|
sbbq 24(%rsi),%r11
|
|
sbbq $0,%r13
|
|
|
|
cmovcq %rax,%r8
|
|
cmovcq %rdx,%r9
|
|
movq %r8,0(%rdi)
|
|
cmovcq %rcx,%r10
|
|
movq %r9,8(%rdi)
|
|
cmovcq %r12,%r11
|
|
movq %r10,16(%rdi)
|
|
movq %r11,24(%rdi)
|
|
|
|
popq %r13
|
|
popq %r12
|
|
.byte 0xf3,0xc3
|
|
|
|
|
|
|
|
|
|
.globl func(sm2_z256_modp_sub)
|
|
|
|
.p2align 5
|
|
func(sm2_z256_modp_sub):
|
|
pushq %r12
|
|
pushq %r13
|
|
|
|
movq 0(%rsi),%r8
|
|
xorq %r13,%r13
|
|
movq 8(%rsi),%r9
|
|
movq 16(%rsi),%r10
|
|
movq 24(%rsi),%r11
|
|
leaq L$poly(%rip),%rsi
|
|
|
|
subq 0(%rdx),%r8
|
|
sbbq 8(%rdx),%r9
|
|
movq %r8,%rax
|
|
sbbq 16(%rdx),%r10
|
|
sbbq 24(%rdx),%r11
|
|
movq %r9,%rdx
|
|
sbbq $0,%r13
|
|
|
|
addq 0(%rsi),%r8
|
|
movq %r10,%rcx
|
|
adcq 8(%rsi),%r9
|
|
adcq 16(%rsi),%r10
|
|
movq %r11,%r12
|
|
adcq 24(%rsi),%r11
|
|
testq %r13,%r13
|
|
|
|
cmovzq %rax,%r8
|
|
cmovzq %rdx,%r9
|
|
movq %r8,0(%rdi)
|
|
cmovzq %rcx,%r10
|
|
movq %r9,8(%rdi)
|
|
cmovzq %r12,%r11
|
|
movq %r10,16(%rdi)
|
|
movq %r11,24(%rdi)
|
|
|
|
popq %r13
|
|
popq %r12
|
|
.byte 0xf3,0xc3
|
|
|
|
|
|
|
|
|
|
.globl func(sm2_z256_modp_neg)
|
|
|
|
.p2align 5
|
|
func(sm2_z256_modp_neg):
|
|
pushq %r12
|
|
pushq %r13
|
|
|
|
xorq %r8,%r8
|
|
xorq %r9,%r9
|
|
xorq %r10,%r10
|
|
xorq %r11,%r11
|
|
xorq %r13,%r13
|
|
|
|
subq 0(%rsi),%r8
|
|
sbbq 8(%rsi),%r9
|
|
sbbq 16(%rsi),%r10
|
|
movq %r8,%rax
|
|
sbbq 24(%rsi),%r11
|
|
leaq L$poly(%rip),%rsi
|
|
movq %r9,%rdx
|
|
sbbq $0,%r13
|
|
|
|
addq 0(%rsi),%r8
|
|
movq %r10,%rcx
|
|
adcq 8(%rsi),%r9
|
|
adcq 16(%rsi),%r10
|
|
movq %r11,%r12
|
|
adcq 24(%rsi),%r11
|
|
testq %r13,%r13
|
|
|
|
cmovzq %rax,%r8
|
|
cmovzq %rdx,%r9
|
|
movq %r8,0(%rdi)
|
|
cmovzq %rcx,%r10
|
|
movq %r9,8(%rdi)
|
|
cmovzq %r12,%r11
|
|
movq %r10,16(%rdi)
|
|
movq %r11,24(%rdi)
|
|
|
|
popq %r13
|
|
popq %r12
|
|
.byte 0xf3,0xc3
|
|
|
|
|
|
|
|
|
|
|
|
.globl func(sm2_z256_modp_to_mont)
|
|
|
|
.p2align 5
|
|
func(sm2_z256_modp_to_mont):
|
|
// swap(arg1, arg2)
|
|
movq %rdi, %rax
|
|
movq %rsi, %rdi
|
|
movq %rax, %rsi
|
|
leaq L$RR(%rip),%rdx
|
|
jmp L$mul_mont
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.globl func(sm2_z256_modp_mont_mul)
|
|
|
|
.p2align 5
|
|
func(sm2_z256_modp_mont_mul):
|
|
L$mul_mont:
|
|
pushq %rbp
|
|
pushq %rbx
|
|
pushq %r12
|
|
pushq %r13
|
|
pushq %r14
|
|
pushq %r15
|
|
movq %rdx,%rbx
|
|
movq 0(%rdx),%rax
|
|
movq 0(%rsi),%r9
|
|
movq 8(%rsi),%r10
|
|
movq 16(%rsi),%r11
|
|
movq 24(%rsi),%r12
|
|
|
|
call __ecp_sm2z256_mul_montq
|
|
L$mul_mont_done:
|
|
popq %r15
|
|
popq %r14
|
|
popq %r13
|
|
popq %r12
|
|
popq %rbx
|
|
popq %rbp
|
|
.byte 0xf3,0xc3
|
|
|
|
|
|
|
|
.p2align 5
|
|
__ecp_sm2z256_mul_montq:
|
|
|
|
|
|
|
|
movq %rax,%rbp
|
|
mulq %r9
|
|
movq L$poly+8(%rip),%r14
|
|
movq %rax,%r8
|
|
movq %rbp,%rax
|
|
movq %rdx,%r9
|
|
|
|
mulq %r10
|
|
movq L$poly+24(%rip),%r15
|
|
addq %rax,%r9
|
|
movq %rbp,%rax
|
|
adcq $0,%rdx
|
|
movq %rdx,%r10
|
|
|
|
mulq %r11
|
|
addq %rax,%r10
|
|
movq %rbp,%rax
|
|
adcq $0,%rdx
|
|
movq %rdx,%r11
|
|
|
|
mulq %r12
|
|
addq %rax,%r11
|
|
movq %r8,%rax
|
|
adcq $0,%rdx
|
|
xorq %r13,%r13
|
|
movq %rdx,%r12
|
|
|
|
|
|
|
|
|
|
movq %r8,%rbp
|
|
addq %r8,%r9
|
|
adcq $0,%r10
|
|
adcq $0,%r11
|
|
adcq %r8,%r12
|
|
adcq $0,%r13
|
|
shlq $32,%r8
|
|
shrq $32,%rbp
|
|
subq %r8,%r9
|
|
movq 8(%rbx),%rax
|
|
sbbq %rbp,%r10
|
|
sbbq %r8,%r11
|
|
sbbq %rbp,%r12
|
|
sbbq $0,%r13
|
|
xorq %r8,%r8
|
|
|
|
|
|
|
|
|
|
movq %rax,%rbp
|
|
mulq 0(%rsi)
|
|
addq %rax,%r9
|
|
movq %rbp,%rax
|
|
adcq $0,%rdx
|
|
movq %rdx,%rcx
|
|
|
|
mulq 8(%rsi)
|
|
addq %rcx,%r10
|
|
adcq $0,%rdx
|
|
addq %rax,%r10
|
|
movq %rbp,%rax
|
|
adcq $0,%rdx
|
|
movq %rdx,%rcx
|
|
|
|
mulq 16(%rsi)
|
|
addq %rcx,%r11
|
|
adcq $0,%rdx
|
|
addq %rax,%r11
|
|
movq %rbp,%rax
|
|
adcq $0,%rdx
|
|
movq %rdx,%rcx
|
|
|
|
mulq 24(%rsi)
|
|
addq %rcx,%r12
|
|
adcq $0,%rdx
|
|
addq %rax,%r12
|
|
movq %r9,%rax
|
|
adcq %rdx,%r13
|
|
adcq $0,%r8
|
|
|
|
|
|
|
|
|
|
movq %r9,%rbp
|
|
addq %r9,%r10
|
|
adcq $0,%r11
|
|
adcq $0,%r12
|
|
adcq %r9,%r13
|
|
adcq $0,%r8
|
|
shlq $32,%r9
|
|
shrq $32,%rbp
|
|
subq %r9,%r10
|
|
movq 16(%rbx),%rax
|
|
sbbq %rbp,%r11
|
|
sbbq %r9,%r12
|
|
sbbq %rbp,%r13
|
|
sbbq $0,%r8
|
|
xorq %r9,%r9
|
|
|
|
|
|
|
|
|
|
movq %rax,%rbp
|
|
mulq 0(%rsi)
|
|
addq %rax,%r10
|
|
movq %rbp,%rax
|
|
adcq $0,%rdx
|
|
movq %rdx,%rcx
|
|
|
|
mulq 8(%rsi)
|
|
addq %rcx,%r11
|
|
adcq $0,%rdx
|
|
addq %rax,%r11
|
|
movq %rbp,%rax
|
|
adcq $0,%rdx
|
|
movq %rdx,%rcx
|
|
|
|
mulq 16(%rsi)
|
|
addq %rcx,%r12
|
|
adcq $0,%rdx
|
|
addq %rax,%r12
|
|
movq %rbp,%rax
|
|
adcq $0,%rdx
|
|
movq %rdx,%rcx
|
|
|
|
mulq 24(%rsi)
|
|
addq %rcx,%r13
|
|
adcq $0,%rdx
|
|
addq %rax,%r13
|
|
movq %r10,%rax
|
|
adcq %rdx,%r8
|
|
adcq $0,%r9
|
|
|
|
|
|
|
|
|
|
movq %r10,%rbp
|
|
addq %r10,%r11
|
|
adcq $0,%r12
|
|
adcq $0,%r13
|
|
adcq %r10,%r8
|
|
adcq $0,%r9
|
|
shlq $32,%r10
|
|
shrq $32,%rbp
|
|
subq %r10,%r11
|
|
movq 24(%rbx),%rax
|
|
sbbq %rbp,%r12
|
|
sbbq %r10,%r13
|
|
sbbq %rbp,%r8
|
|
sbbq $0,%r9
|
|
xorq %r10,%r10
|
|
|
|
|
|
|
|
|
|
movq %rax,%rbp
|
|
mulq 0(%rsi)
|
|
addq %rax,%r11
|
|
movq %rbp,%rax
|
|
adcq $0,%rdx
|
|
movq %rdx,%rcx
|
|
|
|
mulq 8(%rsi)
|
|
addq %rcx,%r12
|
|
adcq $0,%rdx
|
|
addq %rax,%r12
|
|
movq %rbp,%rax
|
|
adcq $0,%rdx
|
|
movq %rdx,%rcx
|
|
|
|
mulq 16(%rsi)
|
|
addq %rcx,%r13
|
|
adcq $0,%rdx
|
|
addq %rax,%r13
|
|
movq %rbp,%rax
|
|
adcq $0,%rdx
|
|
movq %rdx,%rcx
|
|
|
|
mulq 24(%rsi)
|
|
addq %rcx,%r8
|
|
adcq $0,%rdx
|
|
addq %rax,%r8
|
|
movq %r11,%rax
|
|
adcq %rdx,%r9
|
|
adcq $0,%r10
|
|
|
|
|
|
|
|
|
|
movq %r11,%rbp
|
|
addq %r11,%r12
|
|
adcq $0,%r13
|
|
adcq $0,%r8
|
|
adcq %r11,%r9
|
|
adcq $0,%r10
|
|
shlq $32,%r11
|
|
shrq $32,%rbp
|
|
subq %r11,%r12
|
|
movq 32(%rbx),%rax
|
|
sbbq %rbp,%r13
|
|
sbbq %r11,%r8
|
|
sbbq %rbp,%r9
|
|
sbbq $0,%r10
|
|
|
|
movq %r12,%rcx
|
|
movq %r13,%rbp
|
|
|
|
|
|
|
|
|
|
subq L$poly+0(%rip),%r12
|
|
movq %r8,%rbx
|
|
sbbq L$poly+8(%rip),%r13
|
|
sbbq L$poly+16(%rip),%r8
|
|
movq %r9,%rdx
|
|
sbbq L$poly+24(%rip),%r9
|
|
sbbq $0,%r10
|
|
|
|
cmovcq %rcx,%r12
|
|
cmovcq %rbp,%r13
|
|
movq %r12,0(%rdi)
|
|
cmovcq %rbx,%r8
|
|
movq %r13,8(%rdi)
|
|
cmovcq %rdx,%r9
|
|
movq %r8,16(%rdi)
|
|
movq %r9,24(%rdi)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.byte 0xf3,0xc3
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.globl func(sm2_z256_modp_mont_sqr)
|
|
|
|
.p2align 5
|
|
func(sm2_z256_modp_mont_sqr):
|
|
pushq %rbp
|
|
pushq %rbx
|
|
pushq %r12
|
|
pushq %r13
|
|
pushq %r14
|
|
pushq %r15
|
|
movq 0(%rsi),%rax
|
|
movq 8(%rsi),%r14
|
|
movq 16(%rsi),%r15
|
|
movq 24(%rsi),%r8
|
|
|
|
call __ecp_sm2z256_sqr_montq
|
|
L$sqr_mont_done:
|
|
popq %r15
|
|
popq %r14
|
|
popq %r13
|
|
popq %r12
|
|
popq %rbx
|
|
popq %rbp
|
|
.byte 0xf3,0xc3
|
|
|
|
|
|
|
|
.p2align 5
|
|
__ecp_sm2z256_sqr_montq:
|
|
movq %rax,%r13
|
|
mulq %r14
|
|
movq %rax,%r9
|
|
movq %r15,%rax
|
|
movq %rdx,%r10
|
|
|
|
mulq %r13
|
|
addq %rax,%r10
|
|
movq %r8,%rax
|
|
adcq $0,%rdx
|
|
movq %rdx,%r11
|
|
|
|
mulq %r13
|
|
addq %rax,%r11
|
|
movq %r15,%rax
|
|
adcq $0,%rdx
|
|
movq %rdx,%r12
|
|
|
|
|
|
mulq %r14
|
|
addq %rax,%r11
|
|
movq %r8,%rax
|
|
adcq $0,%rdx
|
|
movq %rdx,%rbp
|
|
|
|
mulq %r14
|
|
addq %rax,%r12
|
|
movq %r8,%rax
|
|
adcq $0,%rdx
|
|
addq %rbp,%r12
|
|
movq %rdx,%r13
|
|
adcq $0,%r13
|
|
|
|
|
|
mulq %r15
|
|
xorq %r15,%r15
|
|
addq %rax,%r13
|
|
movq 0(%rsi),%rax
|
|
movq %rdx,%r14
|
|
adcq $0,%r14
|
|
|
|
addq %r9,%r9
|
|
adcq %r10,%r10
|
|
adcq %r11,%r11
|
|
adcq %r12,%r12
|
|
adcq %r13,%r13
|
|
adcq %r14,%r14
|
|
adcq $0,%r15
|
|
|
|
mulq %rax
|
|
movq %rax,%r8
|
|
movq 8(%rsi),%rax
|
|
movq %rdx,%rcx
|
|
|
|
mulq %rax
|
|
addq %rcx,%r9
|
|
adcq %rax,%r10
|
|
movq 16(%rsi),%rax
|
|
adcq $0,%rdx
|
|
movq %rdx,%rcx
|
|
|
|
mulq %rax
|
|
addq %rcx,%r11
|
|
adcq %rax,%r12
|
|
movq 24(%rsi),%rax
|
|
adcq $0,%rdx
|
|
movq %rdx,%rcx
|
|
|
|
mulq %rax
|
|
addq %rcx,%r13
|
|
adcq %rax,%r14
|
|
movq %r8,%rax
|
|
adcq %rdx,%r15
|
|
|
|
movq L$poly+8(%rip),%rsi
|
|
movq L$poly+24(%rip),%rbp
|
|
|
|
|
|
|
|
|
|
movq %r8,%rcx
|
|
movq %r8,%rax
|
|
|
|
addq %r8,%r9
|
|
adcq $0,%r10
|
|
adcq $0,%r11
|
|
adcq $0,%r8
|
|
shlq $32,%rax
|
|
shrq $32,%rcx
|
|
subq %rax,%r9
|
|
sbbq %rcx,%r10
|
|
sbbq %rax,%r11
|
|
sbbq %rcx,%r8
|
|
|
|
|
|
|
|
movq %r9,%rcx
|
|
movq %r9,%rax
|
|
|
|
addq %r9,%r10
|
|
adcq $0,%r11
|
|
adcq $0,%r8
|
|
adcq $0,%r9
|
|
shlq $32,%rax
|
|
shrq $32,%rcx
|
|
subq %rax,%r10
|
|
sbbq %rcx,%r11
|
|
sbbq %rax,%r8
|
|
sbbq %rcx,%r9
|
|
|
|
|
|
|
|
movq %r10,%rcx
|
|
movq %r10,%rax
|
|
|
|
addq %r10,%r11
|
|
adcq $0,%r8
|
|
adcq $0,%r9
|
|
adcq $0,%r10
|
|
shlq $32,%rax
|
|
shrq $32,%rcx
|
|
subq %rax,%r11
|
|
sbbq %rcx,%r8
|
|
sbbq %rax,%r9
|
|
sbbq %rcx,%r10
|
|
|
|
|
|
|
|
movq %r11,%rcx
|
|
movq %r11,%rax
|
|
|
|
addq %r11,%r8
|
|
adcq $0,%r9
|
|
adcq $0,%r10
|
|
adcq $0,%r11
|
|
shlq $32,%rax
|
|
shrq $32,%rcx
|
|
subq %rax,%r8
|
|
sbbq %rcx,%r9
|
|
sbbq %rax,%r10
|
|
sbbq %rcx,%r11
|
|
|
|
movq %r11,%rdx
|
|
xorq %r11,%r11
|
|
|
|
|
|
|
|
addq %r8,%r12
|
|
adcq %r9,%r13
|
|
movq %r12,%r8
|
|
adcq %r10,%r14
|
|
adcq %rdx,%r15
|
|
movq %r13,%r9
|
|
adcq $0,%r11
|
|
|
|
subq L$poly+0(%rip),%r12
|
|
movq %r14,%r10
|
|
sbbq L$poly+8(%rip),%r13
|
|
sbbq L$poly+16(%rip),%r14
|
|
movq %r15,%rcx
|
|
sbbq L$poly+24(%rip),%r15
|
|
sbbq $0,%r11
|
|
|
|
cmovcq %r8,%r12
|
|
cmovcq %r9,%r13
|
|
movq %r12,0(%rdi)
|
|
cmovcq %r10,%r14
|
|
movq %r13,8(%rdi)
|
|
cmovcq %rcx,%r15
|
|
movq %r14,16(%rdi)
|
|
movq %r15,24(%rdi)
|
|
|
|
.byte 0xf3,0xc3
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.globl func(sm2_z256_modp_from_mont)
|
|
|
|
.p2align 5
|
|
func(sm2_z256_modp_from_mont):
|
|
pushq %r12
|
|
pushq %r13
|
|
|
|
movq 0(%rsi),%r8
|
|
movq 8(%rsi),%r9
|
|
movq 16(%rsi),%r10
|
|
movq 24(%rsi),%r11
|
|
|
|
|
|
|
|
movq %r8,%rcx
|
|
addq %r8,%r9
|
|
adcq $0,%r10
|
|
adcq $0,%r11
|
|
adcq $0,%r8
|
|
movq %rcx,%r13
|
|
shlq $32,%rcx
|
|
shrq $32,%r13
|
|
subq %rcx,%r9
|
|
sbbq %r13,%r10
|
|
sbbq %rcx,%r11
|
|
sbbq %r13,%r8
|
|
|
|
|
|
|
|
movq %r9,%rcx
|
|
addq %r9,%r10
|
|
adcq $0,%r11
|
|
adcq $0,%r8
|
|
adcq $0,%r9
|
|
movq %rcx,%r13
|
|
shlq $32,%rcx
|
|
shrq $32,%r13
|
|
subq %rcx,%r10
|
|
sbbq %r13,%r11
|
|
sbbq %rcx,%r8
|
|
sbbq %r13,%r9
|
|
|
|
|
|
|
|
movq %r10,%rcx
|
|
addq %r10,%r11
|
|
adcq $0,%r8
|
|
adcq $0,%r9
|
|
adcq $0,%r10
|
|
movq %rcx,%r13
|
|
shlq $32,%rcx
|
|
shrq $32,%r13
|
|
subq %rcx,%r11
|
|
sbbq %r13,%r8
|
|
sbbq %rcx,%r9
|
|
sbbq %r13,%r10
|
|
|
|
|
|
|
|
movq %r11,%rcx
|
|
addq %r11,%r8
|
|
adcq $0,%r9
|
|
adcq $0,%r10
|
|
adcq $0,%r11
|
|
movq %rcx,%r13
|
|
shlq $32,%rcx
|
|
shrq $32,%r13
|
|
subq %rcx,%r8
|
|
sbbq %r13,%r9
|
|
sbbq %rcx,%r10
|
|
sbbq %r13,%r11
|
|
|
|
|
|
|
|
|
|
movq %r8,%rcx
|
|
movq %r9,%rsi
|
|
movq %r10,%rax
|
|
movq %r11,%rdx
|
|
|
|
subq L$poly+0(%rip),%r8
|
|
sbbq L$poly+8(%rip),%r9
|
|
sbbq L$poly+16(%rip),%r10
|
|
sbbq L$poly+24(%rip),%r11
|
|
sbbq %r13,%r13
|
|
|
|
cmovnzq %rcx,%r8
|
|
cmovnzq %rsi,%r9
|
|
movq %r8,0(%rdi)
|
|
cmovnzq %rax,%r10
|
|
movq %r9,8(%rdi)
|
|
cmovnzq %rdx,%r11
|
|
movq %r10,16(%rdi)
|
|
movq %r11,24(%rdi)
|
|
|
|
popq %r13
|
|
popq %r12
|
|
.byte 0xf3,0xc3
|
|
|
|
|
|
|
|
.globl _ecp_sm2z256_scatter_w5
|
|
|
|
.p2align 5
|
|
_ecp_sm2z256_scatter_w5:
|
|
leal -3(%rdx,%rdx,2),%edx
|
|
movdqa 0(%rsi),%xmm0
|
|
shll $5,%edx
|
|
movdqa 16(%rsi),%xmm1
|
|
movdqa 32(%rsi),%xmm2
|
|
movdqa 48(%rsi),%xmm3
|
|
movdqa 64(%rsi),%xmm4
|
|
movdqa 80(%rsi),%xmm5
|
|
movdqa %xmm0,0(%rdi,%rdx,1)
|
|
movdqa %xmm1,16(%rdi,%rdx,1)
|
|
movdqa %xmm2,32(%rdi,%rdx,1)
|
|
movdqa %xmm3,48(%rdi,%rdx,1)
|
|
movdqa %xmm4,64(%rdi,%rdx,1)
|
|
movdqa %xmm5,80(%rdi,%rdx,1)
|
|
|
|
.byte 0xf3,0xc3
|
|
|
|
|
|
|
|
|
|
.globl _ecp_sm2z256_gather_w5
|
|
|
|
.p2align 5
|
|
_ecp_sm2z256_gather_w5:
|
|
movdqa L$One(%rip),%xmm0
|
|
movd %edx,%xmm1
|
|
|
|
pxor %xmm2,%xmm2
|
|
pxor %xmm3,%xmm3
|
|
pxor %xmm4,%xmm4
|
|
pxor %xmm5,%xmm5
|
|
pxor %xmm6,%xmm6
|
|
pxor %xmm7,%xmm7
|
|
|
|
movdqa %xmm0,%xmm8
|
|
pshufd $0,%xmm1,%xmm1
|
|
|
|
movq $16,%rax
|
|
L$select_loop_sse_w5:
|
|
|
|
movdqa %xmm8,%xmm15
|
|
paddd %xmm0,%xmm8
|
|
pcmpeqd %xmm1,%xmm15
|
|
|
|
movdqa 0(%rsi),%xmm9
|
|
movdqa 16(%rsi),%xmm10
|
|
movdqa 32(%rsi),%xmm11
|
|
movdqa 48(%rsi),%xmm12
|
|
movdqa 64(%rsi),%xmm13
|
|
movdqa 80(%rsi),%xmm14
|
|
leaq 96(%rsi),%rsi
|
|
|
|
pand %xmm15,%xmm9
|
|
pand %xmm15,%xmm10
|
|
por %xmm9,%xmm2
|
|
pand %xmm15,%xmm11
|
|
por %xmm10,%xmm3
|
|
pand %xmm15,%xmm12
|
|
por %xmm11,%xmm4
|
|
pand %xmm15,%xmm13
|
|
por %xmm12,%xmm5
|
|
pand %xmm15,%xmm14
|
|
por %xmm13,%xmm6
|
|
por %xmm14,%xmm7
|
|
|
|
decq %rax
|
|
jnz L$select_loop_sse_w5
|
|
|
|
movdqu %xmm2,0(%rdi)
|
|
movdqu %xmm3,16(%rdi)
|
|
movdqu %xmm4,32(%rdi)
|
|
movdqu %xmm5,48(%rdi)
|
|
movdqu %xmm6,64(%rdi)
|
|
movdqu %xmm7,80(%rdi)
|
|
.byte 0xf3,0xc3
|
|
|
|
|
|
|
|
|
|
.globl _ecp_sm2z256_scatter_w7
|
|
|
|
.p2align 5
|
|
_ecp_sm2z256_scatter_w7:
|
|
movdqu 0(%rsi),%xmm0
|
|
shll $6,%edx
|
|
movdqu 16(%rsi),%xmm1
|
|
movdqu 32(%rsi),%xmm2
|
|
movdqu 48(%rsi),%xmm3
|
|
movdqa %xmm0,0(%rdi,%rdx,1)
|
|
movdqa %xmm1,16(%rdi,%rdx,1)
|
|
movdqa %xmm2,32(%rdi,%rdx,1)
|
|
movdqa %xmm3,48(%rdi,%rdx,1)
|
|
|
|
.byte 0xf3,0xc3
|
|
|
|
|
|
|
|
|
|
.globl _ecp_sm2z256_gather_w7
|
|
|
|
.p2align 5
|
|
_ecp_sm2z256_gather_w7:
|
|
movdqa L$One(%rip),%xmm8
|
|
movd %edx,%xmm1
|
|
|
|
pxor %xmm2,%xmm2
|
|
pxor %xmm3,%xmm3
|
|
pxor %xmm4,%xmm4
|
|
pxor %xmm5,%xmm5
|
|
|
|
movdqa %xmm8,%xmm0
|
|
pshufd $0,%xmm1,%xmm1
|
|
movq $64,%rax
|
|
|
|
L$select_loop_sse_w7:
|
|
movdqa %xmm8,%xmm15
|
|
paddd %xmm0,%xmm8
|
|
movdqa 0(%rsi),%xmm9
|
|
movdqa 16(%rsi),%xmm10
|
|
pcmpeqd %xmm1,%xmm15
|
|
movdqa 32(%rsi),%xmm11
|
|
movdqa 48(%rsi),%xmm12
|
|
leaq 64(%rsi),%rsi
|
|
|
|
pand %xmm15,%xmm9
|
|
pand %xmm15,%xmm10
|
|
por %xmm9,%xmm2
|
|
pand %xmm15,%xmm11
|
|
por %xmm10,%xmm3
|
|
pand %xmm15,%xmm12
|
|
por %xmm11,%xmm4
|
|
prefetcht0 255(%rsi)
|
|
por %xmm12,%xmm5
|
|
|
|
decq %rax
|
|
jnz L$select_loop_sse_w7
|
|
|
|
movdqu %xmm2,0(%rdi)
|
|
movdqu %xmm3,16(%rdi)
|
|
movdqu %xmm4,32(%rdi)
|
|
movdqu %xmm5,48(%rdi)
|
|
.byte 0xf3,0xc3
|
|
|
|
.globl _ecp_sm2z256_avx2_gather_w7
|
|
|
|
.p2align 5
|
|
_ecp_sm2z256_avx2_gather_w7:
|
|
.byte 0x0f,0x0b
|
|
.byte 0xf3,0xc3
|
|
|
|
|
|
.p2align 5
|
|
__ecp_sm2z256_add_toq:
|
|
xorq %r11,%r11
|
|
addq 0(%rbx),%r12
|
|
adcq 8(%rbx),%r13
|
|
movq %r12,%rax
|
|
adcq 16(%rbx),%r8
|
|
adcq 24(%rbx),%r9
|
|
movq %r13,%rbp
|
|
adcq $0,%r11
|
|
|
|
subq L$poly+0(%rip),%r12
|
|
movq %r8,%rcx
|
|
sbbq L$poly+8(%rip),%r13
|
|
sbbq L$poly+16(%rip),%r8
|
|
movq %r9,%r10
|
|
sbbq L$poly+24(%rip),%r9
|
|
sbbq $0,%r11
|
|
|
|
cmovcq %rax,%r12
|
|
cmovcq %rbp,%r13
|
|
movq %r12,0(%rdi)
|
|
cmovcq %rcx,%r8
|
|
movq %r13,8(%rdi)
|
|
cmovcq %r10,%r9
|
|
movq %r8,16(%rdi)
|
|
movq %r9,24(%rdi)
|
|
|
|
.byte 0xf3,0xc3
|
|
|
|
|
|
|
|
.p2align 5
|
|
__ecp_sm2z256_sub_fromq:
|
|
subq 0(%rbx),%r12
|
|
sbbq 8(%rbx),%r13
|
|
movq %r12,%rax
|
|
sbbq 16(%rbx),%r8
|
|
sbbq 24(%rbx),%r9
|
|
movq %r13,%rbp
|
|
sbbq %r11,%r11
|
|
|
|
addq L$poly+0(%rip),%r12
|
|
movq %r8,%rcx
|
|
adcq L$poly+8(%rip),%r13
|
|
adcq L$poly+16(%rip),%r8
|
|
movq %r9,%r10
|
|
adcq L$poly+24(%rip),%r9
|
|
testq %r11,%r11
|
|
|
|
cmovzq %rax,%r12
|
|
cmovzq %rbp,%r13
|
|
movq %r12,0(%rdi)
|
|
cmovzq %rcx,%r8
|
|
movq %r13,8(%rdi)
|
|
cmovzq %r10,%r9
|
|
movq %r8,16(%rdi)
|
|
movq %r9,24(%rdi)
|
|
|
|
.byte 0xf3,0xc3
|
|
|
|
|
|
|
|
.p2align 5
|
|
__ecp_sm2z256_subq:
|
|
subq %r12,%rax
|
|
sbbq %r13,%rbp
|
|
movq %rax,%r12
|
|
sbbq %r8,%rcx
|
|
sbbq %r9,%r10
|
|
movq %rbp,%r13
|
|
sbbq %r11,%r11
|
|
|
|
addq L$poly+0(%rip),%rax
|
|
movq %rcx,%r8
|
|
adcq L$poly+8(%rip),%rbp
|
|
adcq L$poly+16(%rip),%rcx
|
|
movq %r10,%r9
|
|
adcq L$poly+24(%rip),%r10
|
|
testq %r11,%r11
|
|
|
|
cmovnzq %rax,%r12
|
|
cmovnzq %rbp,%r13
|
|
cmovnzq %rcx,%r8
|
|
cmovnzq %r10,%r9
|
|
|
|
.byte 0xf3,0xc3
|
|
|
|
|
|
|
|
.p2align 5
|
|
__ecp_sm2z256_mul_by_2q:
|
|
xorq %r11,%r11
|
|
addq %r12,%r12
|
|
adcq %r13,%r13
|
|
movq %r12,%rax
|
|
adcq %r8,%r8
|
|
adcq %r9,%r9
|
|
movq %r13,%rbp
|
|
adcq $0,%r11
|
|
|
|
subq L$poly+0(%rip),%r12
|
|
movq %r8,%rcx
|
|
sbbq L$poly+8(%rip),%r13
|
|
sbbq L$poly+16(%rip),%r8
|
|
movq %r9,%r10
|
|
sbbq L$poly+24(%rip),%r9
|
|
sbbq $0,%r11
|
|
|
|
cmovcq %rax,%r12
|
|
cmovcq %rbp,%r13
|
|
movq %r12,0(%rdi)
|
|
cmovcq %rcx,%r8
|
|
movq %r13,8(%rdi)
|
|
cmovcq %r10,%r9
|
|
movq %r8,16(%rdi)
|
|
movq %r9,24(%rdi)
|
|
|
|
.byte 0xf3,0xc3
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.globl func(sm2_z256_point_dbl)
|
|
|
|
.p2align 5
|
|
func(sm2_z256_point_dbl):
|
|
pushq %rbp
|
|
pushq %rbx
|
|
pushq %r12
|
|
pushq %r13
|
|
pushq %r14
|
|
pushq %r15
|
|
subq $160+8,%rsp
|
|
|
|
L$point_double_shortcutq:
|
|
movdqu 0(%rsi),%xmm0
|
|
movq %rsi,%rbx
|
|
movdqu 16(%rsi),%xmm1
|
|
movq 32+0(%rsi),%r12
|
|
movq 32+8(%rsi),%r13
|
|
movq 32+16(%rsi),%r8
|
|
movq 32+24(%rsi),%r9
|
|
movq L$poly+8(%rip),%r14
|
|
movq L$poly+24(%rip),%r15
|
|
movdqa %xmm0,96(%rsp)
|
|
movdqa %xmm1,96+16(%rsp)
|
|
leaq 32(%rdi),%r10
|
|
leaq 64(%rdi),%r11
|
|
.byte 102,72,15,110,199
|
|
.byte 102,73,15,110,202
|
|
.byte 102,73,15,110,211
|
|
|
|
leaq 0(%rsp),%rdi
|
|
call __ecp_sm2z256_mul_by_2q
|
|
|
|
movq 64+0(%rsi),%rax
|
|
movq 64+8(%rsi),%r14
|
|
movq 64+16(%rsi),%r15
|
|
movq 64+24(%rsi),%r8
|
|
leaq 64-0(%rsi),%rsi
|
|
leaq 64(%rsp),%rdi
|
|
call __ecp_sm2z256_sqr_montq
|
|
|
|
movq 0+0(%rsp),%rax
|
|
movq 8+0(%rsp),%r14
|
|
leaq 0+0(%rsp),%rsi
|
|
movq 16+0(%rsp),%r15
|
|
movq 24+0(%rsp),%r8
|
|
leaq 0(%rsp),%rdi
|
|
call __ecp_sm2z256_sqr_montq
|
|
|
|
movq 32(%rbx),%rax
|
|
movq 64+0(%rbx),%r9
|
|
movq 64+8(%rbx),%r10
|
|
movq 64+16(%rbx),%r11
|
|
movq 64+24(%rbx),%r12
|
|
leaq 64-0(%rbx),%rsi
|
|
leaq 32(%rbx),%rbx
|
|
.byte 102,72,15,126,215
|
|
call __ecp_sm2z256_mul_montq
|
|
call __ecp_sm2z256_mul_by_2q
|
|
|
|
movq 96+0(%rsp),%r12
|
|
movq 96+8(%rsp),%r13
|
|
leaq 64(%rsp),%rbx
|
|
movq 96+16(%rsp),%r8
|
|
movq 96+24(%rsp),%r9
|
|
leaq 32(%rsp),%rdi
|
|
call __ecp_sm2z256_add_toq
|
|
|
|
movq 96+0(%rsp),%r12
|
|
movq 96+8(%rsp),%r13
|
|
leaq 64(%rsp),%rbx
|
|
movq 96+16(%rsp),%r8
|
|
movq 96+24(%rsp),%r9
|
|
leaq 64(%rsp),%rdi
|
|
call __ecp_sm2z256_sub_fromq
|
|
|
|
movq 0+0(%rsp),%rax
|
|
movq 8+0(%rsp),%r14
|
|
leaq 0+0(%rsp),%rsi
|
|
movq 16+0(%rsp),%r15
|
|
movq 24+0(%rsp),%r8
|
|
.byte 102,72,15,126,207
|
|
call __ecp_sm2z256_sqr_montq
|
|
xorq %r9,%r9
|
|
movq %r12,%rax
|
|
addq L$poly+0(%rip),%r12
|
|
movq %r13,%r10
|
|
adcq L$poly+8(%rip),%r13
|
|
movq %r14,%rcx
|
|
adcq L$poly+16(%rip),%r14
|
|
movq %r15,%r8
|
|
adcq L$poly+24(%rip),%r15
|
|
adcq $0,%r9
|
|
xorq %rsi,%rsi
|
|
testq $1,%rax
|
|
|
|
cmovzq %rax,%r12
|
|
cmovzq %r10,%r13
|
|
cmovzq %rcx,%r14
|
|
cmovzq %r8,%r15
|
|
cmovzq %rsi,%r9
|
|
|
|
movq %r13,%rax
|
|
shrq $1,%r12
|
|
shlq $63,%rax
|
|
movq %r14,%r10
|
|
shrq $1,%r13
|
|
orq %rax,%r12
|
|
shlq $63,%r10
|
|
movq %r15,%rcx
|
|
shrq $1,%r14
|
|
orq %r10,%r13
|
|
shlq $63,%rcx
|
|
movq %r12,0(%rdi)
|
|
shrq $1,%r15
|
|
movq %r13,8(%rdi)
|
|
shlq $63,%r9
|
|
orq %rcx,%r14
|
|
orq %r9,%r15
|
|
movq %r14,16(%rdi)
|
|
movq %r15,24(%rdi)
|
|
movq 64(%rsp),%rax
|
|
leaq 64(%rsp),%rbx
|
|
movq 0+32(%rsp),%r9
|
|
movq 8+32(%rsp),%r10
|
|
leaq 0+32(%rsp),%rsi
|
|
movq 16+32(%rsp),%r11
|
|
movq 24+32(%rsp),%r12
|
|
leaq 32(%rsp),%rdi
|
|
call __ecp_sm2z256_mul_montq
|
|
|
|
leaq 128(%rsp),%rdi
|
|
call __ecp_sm2z256_mul_by_2q
|
|
|
|
leaq 32(%rsp),%rbx
|
|
leaq 32(%rsp),%rdi
|
|
call __ecp_sm2z256_add_toq
|
|
|
|
movq 96(%rsp),%rax
|
|
leaq 96(%rsp),%rbx
|
|
movq 0+0(%rsp),%r9
|
|
movq 8+0(%rsp),%r10
|
|
leaq 0+0(%rsp),%rsi
|
|
movq 16+0(%rsp),%r11
|
|
movq 24+0(%rsp),%r12
|
|
leaq 0(%rsp),%rdi
|
|
call __ecp_sm2z256_mul_montq
|
|
|
|
leaq 128(%rsp),%rdi
|
|
call __ecp_sm2z256_mul_by_2q
|
|
|
|
movq 0+32(%rsp),%rax
|
|
movq 8+32(%rsp),%r14
|
|
leaq 0+32(%rsp),%rsi
|
|
movq 16+32(%rsp),%r15
|
|
movq 24+32(%rsp),%r8
|
|
.byte 102,72,15,126,199
|
|
call __ecp_sm2z256_sqr_montq
|
|
|
|
leaq 128(%rsp),%rbx
|
|
movq %r14,%r8
|
|
movq %r15,%r9
|
|
movq %rsi,%r14
|
|
movq %rbp,%r15
|
|
call __ecp_sm2z256_sub_fromq
|
|
|
|
movq 0+0(%rsp),%rax
|
|
movq 0+8(%rsp),%rbp
|
|
movq 0+16(%rsp),%rcx
|
|
movq 0+24(%rsp),%r10
|
|
leaq 0(%rsp),%rdi
|
|
call __ecp_sm2z256_subq
|
|
|
|
movq 32(%rsp),%rax
|
|
leaq 32(%rsp),%rbx
|
|
movq %r12,%r14
|
|
xorl %ecx,%ecx
|
|
movq %r12,0+0(%rsp)
|
|
movq %r13,%r10
|
|
movq %r13,0+8(%rsp)
|
|
cmovzq %r8,%r11
|
|
movq %r8,0+16(%rsp)
|
|
leaq 0-0(%rsp),%rsi
|
|
cmovzq %r9,%r12
|
|
movq %r9,0+24(%rsp)
|
|
movq %r14,%r9
|
|
leaq 0(%rsp),%rdi
|
|
call __ecp_sm2z256_mul_montq
|
|
|
|
.byte 102,72,15,126,203
|
|
.byte 102,72,15,126,207
|
|
call __ecp_sm2z256_sub_fromq
|
|
|
|
addq $160+8,%rsp
|
|
popq %r15
|
|
popq %r14
|
|
popq %r13
|
|
popq %r12
|
|
popq %rbx
|
|
popq %rbp
|
|
.byte 0xf3,0xc3
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.globl func(sm2_z256_point_add)
|
|
|
|
.p2align 5
|
|
func(sm2_z256_point_add):
|
|
pushq %rbp
|
|
pushq %rbx
|
|
pushq %r12
|
|
pushq %r13
|
|
pushq %r14
|
|
pushq %r15
|
|
subq $576+8,%rsp
|
|
|
|
movdqu 0(%rsi),%xmm0
|
|
movdqu 16(%rsi),%xmm1
|
|
movdqu 32(%rsi),%xmm2
|
|
movdqu 48(%rsi),%xmm3
|
|
movdqu 64(%rsi),%xmm4
|
|
movdqu 80(%rsi),%xmm5
|
|
movq %rsi,%rbx
|
|
movq %rdx,%rsi
|
|
movdqa %xmm0,384(%rsp)
|
|
movdqa %xmm1,384+16(%rsp)
|
|
movdqa %xmm2,416(%rsp)
|
|
movdqa %xmm3,416+16(%rsp)
|
|
movdqa %xmm4,448(%rsp)
|
|
movdqa %xmm5,448+16(%rsp)
|
|
por %xmm4,%xmm5
|
|
|
|
movdqu 0(%rsi),%xmm0
|
|
pshufd $0xb1,%xmm5,%xmm3
|
|
movdqu 16(%rsi),%xmm1
|
|
movdqu 32(%rsi),%xmm2
|
|
por %xmm3,%xmm5
|
|
movdqu 48(%rsi),%xmm3
|
|
movq 64+0(%rsi),%rax
|
|
movq 64+8(%rsi),%r14
|
|
movq 64+16(%rsi),%r15
|
|
movq 64+24(%rsi),%r8
|
|
movdqa %xmm0,480(%rsp)
|
|
pshufd $0x1e,%xmm5,%xmm4
|
|
movdqa %xmm1,480+16(%rsp)
|
|
movdqu 64(%rsi),%xmm0
|
|
movdqu 80(%rsi),%xmm1
|
|
movdqa %xmm2,512(%rsp)
|
|
movdqa %xmm3,512+16(%rsp)
|
|
por %xmm4,%xmm5
|
|
pxor %xmm4,%xmm4
|
|
por %xmm0,%xmm1
|
|
.byte 102,72,15,110,199
|
|
|
|
leaq 64-0(%rsi),%rsi
|
|
movq %rax,544+0(%rsp)
|
|
movq %r14,544+8(%rsp)
|
|
movq %r15,544+16(%rsp)
|
|
movq %r8,544+24(%rsp)
|
|
leaq 96(%rsp),%rdi
|
|
call __ecp_sm2z256_sqr_montq
|
|
|
|
pcmpeqd %xmm4,%xmm5
|
|
pshufd $0xb1,%xmm1,%xmm4
|
|
por %xmm1,%xmm4
|
|
pshufd $0,%xmm5,%xmm5
|
|
pshufd $0x1e,%xmm4,%xmm3
|
|
por %xmm3,%xmm4
|
|
pxor %xmm3,%xmm3
|
|
pcmpeqd %xmm3,%xmm4
|
|
pshufd $0,%xmm4,%xmm4
|
|
movq 64+0(%rbx),%rax
|
|
movq 64+8(%rbx),%r14
|
|
movq 64+16(%rbx),%r15
|
|
movq 64+24(%rbx),%r8
|
|
.byte 102,72,15,110,203
|
|
|
|
leaq 64-0(%rbx),%rsi
|
|
leaq 32(%rsp),%rdi
|
|
call __ecp_sm2z256_sqr_montq
|
|
|
|
movq 544(%rsp),%rax
|
|
leaq 544(%rsp),%rbx
|
|
movq 0+96(%rsp),%r9
|
|
movq 8+96(%rsp),%r10
|
|
leaq 0+96(%rsp),%rsi
|
|
movq 16+96(%rsp),%r11
|
|
movq 24+96(%rsp),%r12
|
|
leaq 224(%rsp),%rdi
|
|
call __ecp_sm2z256_mul_montq
|
|
|
|
movq 448(%rsp),%rax
|
|
leaq 448(%rsp),%rbx
|
|
movq 0+32(%rsp),%r9
|
|
movq 8+32(%rsp),%r10
|
|
leaq 0+32(%rsp),%rsi
|
|
movq 16+32(%rsp),%r11
|
|
movq 24+32(%rsp),%r12
|
|
leaq 256(%rsp),%rdi
|
|
call __ecp_sm2z256_mul_montq
|
|
|
|
movq 416(%rsp),%rax
|
|
leaq 416(%rsp),%rbx
|
|
movq 0+224(%rsp),%r9
|
|
movq 8+224(%rsp),%r10
|
|
leaq 0+224(%rsp),%rsi
|
|
movq 16+224(%rsp),%r11
|
|
movq 24+224(%rsp),%r12
|
|
leaq 224(%rsp),%rdi
|
|
call __ecp_sm2z256_mul_montq
|
|
|
|
movq 512(%rsp),%rax
|
|
leaq 512(%rsp),%rbx
|
|
movq 0+256(%rsp),%r9
|
|
movq 8+256(%rsp),%r10
|
|
leaq 0+256(%rsp),%rsi
|
|
movq 16+256(%rsp),%r11
|
|
movq 24+256(%rsp),%r12
|
|
leaq 256(%rsp),%rdi
|
|
call __ecp_sm2z256_mul_montq
|
|
|
|
leaq 224(%rsp),%rbx
|
|
leaq 64(%rsp),%rdi
|
|
call __ecp_sm2z256_sub_fromq
|
|
|
|
orq %r13,%r12
|
|
movdqa %xmm4,%xmm2
|
|
orq %r8,%r12
|
|
orq %r9,%r12
|
|
por %xmm5,%xmm2
|
|
.byte 102,73,15,110,220
|
|
|
|
movq 384(%rsp),%rax
|
|
leaq 384(%rsp),%rbx
|
|
movq 0+96(%rsp),%r9
|
|
movq 8+96(%rsp),%r10
|
|
leaq 0+96(%rsp),%rsi
|
|
movq 16+96(%rsp),%r11
|
|
movq 24+96(%rsp),%r12
|
|
leaq 160(%rsp),%rdi
|
|
call __ecp_sm2z256_mul_montq
|
|
|
|
movq 480(%rsp),%rax
|
|
leaq 480(%rsp),%rbx
|
|
movq 0+32(%rsp),%r9
|
|
movq 8+32(%rsp),%r10
|
|
leaq 0+32(%rsp),%rsi
|
|
movq 16+32(%rsp),%r11
|
|
movq 24+32(%rsp),%r12
|
|
leaq 192(%rsp),%rdi
|
|
call __ecp_sm2z256_mul_montq
|
|
|
|
leaq 160(%rsp),%rbx
|
|
leaq 0(%rsp),%rdi
|
|
call __ecp_sm2z256_sub_fromq
|
|
|
|
orq %r13,%r12
|
|
orq %r8,%r12
|
|
orq %r9,%r12
|
|
|
|
.byte 0x3e
|
|
jnz L$add_proceedq
|
|
.byte 102,73,15,126,208
|
|
.byte 102,73,15,126,217
|
|
testq %r8,%r8
|
|
jnz L$add_proceedq
|
|
testq %r9,%r9
|
|
jz L$add_doubleq
|
|
|
|
.byte 102,72,15,126,199
|
|
pxor %xmm0,%xmm0
|
|
movdqu %xmm0,0(%rdi)
|
|
movdqu %xmm0,16(%rdi)
|
|
movdqu %xmm0,32(%rdi)
|
|
movdqu %xmm0,48(%rdi)
|
|
movdqu %xmm0,64(%rdi)
|
|
movdqu %xmm0,80(%rdi)
|
|
jmp L$add_doneq
|
|
|
|
.p2align 5
|
|
L$add_doubleq:
|
|
.byte 102,72,15,126,206
|
|
.byte 102,72,15,126,199
|
|
addq $416,%rsp
|
|
jmp L$point_double_shortcutq
|
|
|
|
.p2align 5
|
|
L$add_proceedq:
|
|
movq 0+64(%rsp),%rax
|
|
movq 8+64(%rsp),%r14
|
|
leaq 0+64(%rsp),%rsi
|
|
movq 16+64(%rsp),%r15
|
|
movq 24+64(%rsp),%r8
|
|
leaq 96(%rsp),%rdi
|
|
call __ecp_sm2z256_sqr_montq
|
|
|
|
movq 448(%rsp),%rax
|
|
leaq 448(%rsp),%rbx
|
|
movq 0+0(%rsp),%r9
|
|
movq 8+0(%rsp),%r10
|
|
leaq 0+0(%rsp),%rsi
|
|
movq 16+0(%rsp),%r11
|
|
movq 24+0(%rsp),%r12
|
|
leaq 352(%rsp),%rdi
|
|
call __ecp_sm2z256_mul_montq
|
|
|
|
movq 0+0(%rsp),%rax
|
|
movq 8+0(%rsp),%r14
|
|
leaq 0+0(%rsp),%rsi
|
|
movq 16+0(%rsp),%r15
|
|
movq 24+0(%rsp),%r8
|
|
leaq 32(%rsp),%rdi
|
|
call __ecp_sm2z256_sqr_montq
|
|
|
|
movq 544(%rsp),%rax
|
|
leaq 544(%rsp),%rbx
|
|
movq 0+352(%rsp),%r9
|
|
movq 8+352(%rsp),%r10
|
|
leaq 0+352(%rsp),%rsi
|
|
movq 16+352(%rsp),%r11
|
|
movq 24+352(%rsp),%r12
|
|
leaq 352(%rsp),%rdi
|
|
call __ecp_sm2z256_mul_montq
|
|
|
|
movq 0(%rsp),%rax
|
|
leaq 0(%rsp),%rbx
|
|
movq 0+32(%rsp),%r9
|
|
movq 8+32(%rsp),%r10
|
|
leaq 0+32(%rsp),%rsi
|
|
movq 16+32(%rsp),%r11
|
|
movq 24+32(%rsp),%r12
|
|
leaq 128(%rsp),%rdi
|
|
call __ecp_sm2z256_mul_montq
|
|
|
|
movq 160(%rsp),%rax
|
|
leaq 160(%rsp),%rbx
|
|
movq 0+32(%rsp),%r9
|
|
movq 8+32(%rsp),%r10
|
|
leaq 0+32(%rsp),%rsi
|
|
movq 16+32(%rsp),%r11
|
|
movq 24+32(%rsp),%r12
|
|
leaq 192(%rsp),%rdi
|
|
call __ecp_sm2z256_mul_montq
|
|
|
|
|
|
|
|
|
|
xorq %r11,%r11
|
|
addq %r12,%r12
|
|
leaq 96(%rsp),%rsi
|
|
adcq %r13,%r13
|
|
movq %r12,%rax
|
|
adcq %r8,%r8
|
|
adcq %r9,%r9
|
|
movq %r13,%rbp
|
|
adcq $0,%r11
|
|
|
|
subq L$poly+0(%rip),%r12
|
|
movq %r8,%rcx
|
|
sbbq L$poly+8(%rip),%r13
|
|
sbbq L$poly+16(%rip),%r8
|
|
movq %r9,%r10
|
|
sbbq L$poly+24(%rip),%r9
|
|
sbbq $0,%r11
|
|
|
|
cmovcq %rax,%r12
|
|
movq 0(%rsi),%rax
|
|
cmovcq %rbp,%r13
|
|
movq 8(%rsi),%rbp
|
|
cmovcq %rcx,%r8
|
|
movq 16(%rsi),%rcx
|
|
cmovcq %r10,%r9
|
|
movq 24(%rsi),%r10
|
|
|
|
call __ecp_sm2z256_subq
|
|
|
|
leaq 128(%rsp),%rbx
|
|
leaq 288(%rsp),%rdi
|
|
call __ecp_sm2z256_sub_fromq
|
|
|
|
movq 192+0(%rsp),%rax
|
|
movq 192+8(%rsp),%rbp
|
|
movq 192+16(%rsp),%rcx
|
|
movq 192+24(%rsp),%r10
|
|
leaq 320(%rsp),%rdi
|
|
|
|
call __ecp_sm2z256_subq
|
|
|
|
movq %r12,0(%rdi)
|
|
movq %r13,8(%rdi)
|
|
movq %r8,16(%rdi)
|
|
movq %r9,24(%rdi)
|
|
movq 128(%rsp),%rax
|
|
leaq 128(%rsp),%rbx
|
|
movq 0+224(%rsp),%r9
|
|
movq 8+224(%rsp),%r10
|
|
leaq 0+224(%rsp),%rsi
|
|
movq 16+224(%rsp),%r11
|
|
movq 24+224(%rsp),%r12
|
|
leaq 256(%rsp),%rdi
|
|
call __ecp_sm2z256_mul_montq
|
|
|
|
movq 320(%rsp),%rax
|
|
leaq 320(%rsp),%rbx
|
|
movq 0+64(%rsp),%r9
|
|
movq 8+64(%rsp),%r10
|
|
leaq 0+64(%rsp),%rsi
|
|
movq 16+64(%rsp),%r11
|
|
movq 24+64(%rsp),%r12
|
|
leaq 320(%rsp),%rdi
|
|
call __ecp_sm2z256_mul_montq
|
|
|
|
leaq 256(%rsp),%rbx
|
|
leaq 320(%rsp),%rdi
|
|
call __ecp_sm2z256_sub_fromq
|
|
|
|
.byte 102,72,15,126,199
|
|
|
|
movdqa %xmm5,%xmm0
|
|
movdqa %xmm5,%xmm1
|
|
pandn 352(%rsp),%xmm0
|
|
movdqa %xmm5,%xmm2
|
|
pandn 352+16(%rsp),%xmm1
|
|
movdqa %xmm5,%xmm3
|
|
pand 544(%rsp),%xmm2
|
|
pand 544+16(%rsp),%xmm3
|
|
por %xmm0,%xmm2
|
|
por %xmm1,%xmm3
|
|
|
|
movdqa %xmm4,%xmm0
|
|
movdqa %xmm4,%xmm1
|
|
pandn %xmm2,%xmm0
|
|
movdqa %xmm4,%xmm2
|
|
pandn %xmm3,%xmm1
|
|
movdqa %xmm4,%xmm3
|
|
pand 448(%rsp),%xmm2
|
|
pand 448+16(%rsp),%xmm3
|
|
por %xmm0,%xmm2
|
|
por %xmm1,%xmm3
|
|
movdqu %xmm2,64(%rdi)
|
|
movdqu %xmm3,80(%rdi)
|
|
|
|
movdqa %xmm5,%xmm0
|
|
movdqa %xmm5,%xmm1
|
|
pandn 288(%rsp),%xmm0
|
|
movdqa %xmm5,%xmm2
|
|
pandn 288+16(%rsp),%xmm1
|
|
movdqa %xmm5,%xmm3
|
|
pand 480(%rsp),%xmm2
|
|
pand 480+16(%rsp),%xmm3
|
|
por %xmm0,%xmm2
|
|
por %xmm1,%xmm3
|
|
|
|
movdqa %xmm4,%xmm0
|
|
movdqa %xmm4,%xmm1
|
|
pandn %xmm2,%xmm0
|
|
movdqa %xmm4,%xmm2
|
|
pandn %xmm3,%xmm1
|
|
movdqa %xmm4,%xmm3
|
|
pand 384(%rsp),%xmm2
|
|
pand 384+16(%rsp),%xmm3
|
|
por %xmm0,%xmm2
|
|
por %xmm1,%xmm3
|
|
movdqu %xmm2,0(%rdi)
|
|
movdqu %xmm3,16(%rdi)
|
|
|
|
movdqa %xmm5,%xmm0
|
|
movdqa %xmm5,%xmm1
|
|
pandn 320(%rsp),%xmm0
|
|
movdqa %xmm5,%xmm2
|
|
pandn 320+16(%rsp),%xmm1
|
|
movdqa %xmm5,%xmm3
|
|
pand 512(%rsp),%xmm2
|
|
pand 512+16(%rsp),%xmm3
|
|
por %xmm0,%xmm2
|
|
por %xmm1,%xmm3
|
|
|
|
movdqa %xmm4,%xmm0
|
|
movdqa %xmm4,%xmm1
|
|
pandn %xmm2,%xmm0
|
|
movdqa %xmm4,%xmm2
|
|
pandn %xmm3,%xmm1
|
|
movdqa %xmm4,%xmm3
|
|
pand 416(%rsp),%xmm2
|
|
pand 416+16(%rsp),%xmm3
|
|
por %xmm0,%xmm2
|
|
por %xmm1,%xmm3
|
|
movdqu %xmm2,32(%rdi)
|
|
movdqu %xmm3,48(%rdi)
|
|
|
|
L$add_doneq:
|
|
addq $576+8,%rsp
|
|
popq %r15
|
|
popq %r14
|
|
popq %r13
|
|
popq %r12
|
|
popq %rbx
|
|
popq %rbp
|
|
.byte 0xf3,0xc3
|
|
|
|
|
|
|
|
|
|
|
|
.globl func(sm2_z256_point_add_affine)
|
|
|
|
.p2align 5
|
|
func(sm2_z256_point_add_affine):
|
|
pushq %rbp
|
|
pushq %rbx
|
|
pushq %r12
|
|
pushq %r13
|
|
pushq %r14
|
|
pushq %r15
|
|
subq $480+8,%rsp
|
|
|
|
movdqu 0(%rsi),%xmm0
|
|
movq %rdx,%rbx
|
|
movdqu 16(%rsi),%xmm1
|
|
movdqu 32(%rsi),%xmm2
|
|
movdqu 48(%rsi),%xmm3
|
|
movdqu 64(%rsi),%xmm4
|
|
movdqu 80(%rsi),%xmm5
|
|
movq 64+0(%rsi),%rax
|
|
movq 64+8(%rsi),%r14
|
|
movq 64+16(%rsi),%r15
|
|
movq 64+24(%rsi),%r8
|
|
movdqa %xmm0,320(%rsp)
|
|
movdqa %xmm1,320+16(%rsp)
|
|
movdqa %xmm2,352(%rsp)
|
|
movdqa %xmm3,352+16(%rsp)
|
|
movdqa %xmm4,384(%rsp)
|
|
movdqa %xmm5,384+16(%rsp)
|
|
por %xmm4,%xmm5
|
|
|
|
movdqu 0(%rbx),%xmm0
|
|
pshufd $0xb1,%xmm5,%xmm3
|
|
movdqu 16(%rbx),%xmm1
|
|
movdqu 32(%rbx),%xmm2
|
|
por %xmm3,%xmm5
|
|
movdqu 48(%rbx),%xmm3
|
|
movdqa %xmm0,416(%rsp)
|
|
pshufd $0x1e,%xmm5,%xmm4
|
|
movdqa %xmm1,416+16(%rsp)
|
|
por %xmm0,%xmm1
|
|
.byte 102,72,15,110,199
|
|
movdqa %xmm2,448(%rsp)
|
|
movdqa %xmm3,448+16(%rsp)
|
|
por %xmm2,%xmm3
|
|
por %xmm4,%xmm5
|
|
pxor %xmm4,%xmm4
|
|
por %xmm1,%xmm3
|
|
|
|
leaq 64-0(%rsi),%rsi
|
|
leaq 32(%rsp),%rdi
|
|
call __ecp_sm2z256_sqr_montq
|
|
|
|
pcmpeqd %xmm4,%xmm5
|
|
pshufd $0xb1,%xmm3,%xmm4
|
|
movq 0(%rbx),%rax
|
|
|
|
movq %r12,%r9
|
|
por %xmm3,%xmm4
|
|
pshufd $0,%xmm5,%xmm5
|
|
pshufd $0x1e,%xmm4,%xmm3
|
|
movq %r13,%r10
|
|
por %xmm3,%xmm4
|
|
pxor %xmm3,%xmm3
|
|
movq %r14,%r11
|
|
pcmpeqd %xmm3,%xmm4
|
|
pshufd $0,%xmm4,%xmm4
|
|
|
|
leaq 32-0(%rsp),%rsi
|
|
movq %r15,%r12
|
|
leaq 0(%rsp),%rdi
|
|
call __ecp_sm2z256_mul_montq
|
|
|
|
leaq 320(%rsp),%rbx
|
|
leaq 64(%rsp),%rdi
|
|
call __ecp_sm2z256_sub_fromq
|
|
|
|
movq 384(%rsp),%rax
|
|
leaq 384(%rsp),%rbx
|
|
movq 0+32(%rsp),%r9
|
|
movq 8+32(%rsp),%r10
|
|
leaq 0+32(%rsp),%rsi
|
|
movq 16+32(%rsp),%r11
|
|
movq 24+32(%rsp),%r12
|
|
leaq 32(%rsp),%rdi
|
|
call __ecp_sm2z256_mul_montq
|
|
|
|
movq 384(%rsp),%rax
|
|
leaq 384(%rsp),%rbx
|
|
movq 0+64(%rsp),%r9
|
|
movq 8+64(%rsp),%r10
|
|
leaq 0+64(%rsp),%rsi
|
|
movq 16+64(%rsp),%r11
|
|
movq 24+64(%rsp),%r12
|
|
leaq 288(%rsp),%rdi
|
|
call __ecp_sm2z256_mul_montq
|
|
|
|
movq 448(%rsp),%rax
|
|
leaq 448(%rsp),%rbx
|
|
movq 0+32(%rsp),%r9
|
|
movq 8+32(%rsp),%r10
|
|
leaq 0+32(%rsp),%rsi
|
|
movq 16+32(%rsp),%r11
|
|
movq 24+32(%rsp),%r12
|
|
leaq 32(%rsp),%rdi
|
|
call __ecp_sm2z256_mul_montq
|
|
|
|
leaq 352(%rsp),%rbx
|
|
leaq 96(%rsp),%rdi
|
|
call __ecp_sm2z256_sub_fromq
|
|
|
|
movq 0+64(%rsp),%rax
|
|
movq 8+64(%rsp),%r14
|
|
leaq 0+64(%rsp),%rsi
|
|
movq 16+64(%rsp),%r15
|
|
movq 24+64(%rsp),%r8
|
|
leaq 128(%rsp),%rdi
|
|
call __ecp_sm2z256_sqr_montq
|
|
|
|
movq 0+96(%rsp),%rax
|
|
movq 8+96(%rsp),%r14
|
|
leaq 0+96(%rsp),%rsi
|
|
movq 16+96(%rsp),%r15
|
|
movq 24+96(%rsp),%r8
|
|
leaq 192(%rsp),%rdi
|
|
call __ecp_sm2z256_sqr_montq
|
|
|
|
movq 128(%rsp),%rax
|
|
leaq 128(%rsp),%rbx
|
|
movq 0+64(%rsp),%r9
|
|
movq 8+64(%rsp),%r10
|
|
leaq 0+64(%rsp),%rsi
|
|
movq 16+64(%rsp),%r11
|
|
movq 24+64(%rsp),%r12
|
|
leaq 160(%rsp),%rdi
|
|
call __ecp_sm2z256_mul_montq
|
|
|
|
movq 320(%rsp),%rax
|
|
leaq 320(%rsp),%rbx
|
|
movq 0+128(%rsp),%r9
|
|
movq 8+128(%rsp),%r10
|
|
leaq 0+128(%rsp),%rsi
|
|
movq 16+128(%rsp),%r11
|
|
movq 24+128(%rsp),%r12
|
|
leaq 0(%rsp),%rdi
|
|
call __ecp_sm2z256_mul_montq
|
|
|
|
|
|
|
|
|
|
xorq %r11,%r11
|
|
addq %r12,%r12
|
|
leaq 192(%rsp),%rsi
|
|
adcq %r13,%r13
|
|
movq %r12,%rax
|
|
adcq %r8,%r8
|
|
adcq %r9,%r9
|
|
movq %r13,%rbp
|
|
adcq $0,%r11
|
|
|
|
subq L$poly+0(%rip),%r12
|
|
movq %r8,%rcx
|
|
sbbq L$poly+8(%rip),%r13
|
|
sbbq L$poly+16(%rip),%r8
|
|
movq %r9,%r10
|
|
sbbq L$poly+24(%rip),%r9
|
|
sbbq $0,%r11
|
|
|
|
cmovcq %rax,%r12
|
|
movq 0(%rsi),%rax
|
|
cmovcq %rbp,%r13
|
|
movq 8(%rsi),%rbp
|
|
cmovcq %rcx,%r8
|
|
movq 16(%rsi),%rcx
|
|
cmovcq %r10,%r9
|
|
movq 24(%rsi),%r10
|
|
|
|
call __ecp_sm2z256_subq
|
|
|
|
leaq 160(%rsp),%rbx
|
|
leaq 224(%rsp),%rdi
|
|
call __ecp_sm2z256_sub_fromq
|
|
|
|
movq 0+0(%rsp),%rax
|
|
movq 0+8(%rsp),%rbp
|
|
movq 0+16(%rsp),%rcx
|
|
movq 0+24(%rsp),%r10
|
|
leaq 64(%rsp),%rdi
|
|
|
|
call __ecp_sm2z256_subq
|
|
|
|
movq %r12,0(%rdi)
|
|
movq %r13,8(%rdi)
|
|
movq %r8,16(%rdi)
|
|
movq %r9,24(%rdi)
|
|
movq 352(%rsp),%rax
|
|
leaq 352(%rsp),%rbx
|
|
movq 0+160(%rsp),%r9
|
|
movq 8+160(%rsp),%r10
|
|
leaq 0+160(%rsp),%rsi
|
|
movq 16+160(%rsp),%r11
|
|
movq 24+160(%rsp),%r12
|
|
leaq 32(%rsp),%rdi
|
|
call __ecp_sm2z256_mul_montq
|
|
|
|
movq 96(%rsp),%rax
|
|
leaq 96(%rsp),%rbx
|
|
movq 0+64(%rsp),%r9
|
|
movq 8+64(%rsp),%r10
|
|
leaq 0+64(%rsp),%rsi
|
|
movq 16+64(%rsp),%r11
|
|
movq 24+64(%rsp),%r12
|
|
leaq 64(%rsp),%rdi
|
|
call __ecp_sm2z256_mul_montq
|
|
|
|
leaq 32(%rsp),%rbx
|
|
leaq 256(%rsp),%rdi
|
|
call __ecp_sm2z256_sub_fromq
|
|
|
|
.byte 102,72,15,126,199
|
|
|
|
movdqa %xmm5,%xmm0
|
|
movdqa %xmm5,%xmm1
|
|
pandn 288(%rsp),%xmm0
|
|
movdqa %xmm5,%xmm2
|
|
pandn 288+16(%rsp),%xmm1
|
|
movdqa %xmm5,%xmm3
|
|
pand L$ONE_mont(%rip),%xmm2
|
|
pand L$ONE_mont+16(%rip),%xmm3
|
|
por %xmm0,%xmm2
|
|
por %xmm1,%xmm3
|
|
|
|
movdqa %xmm4,%xmm0
|
|
movdqa %xmm4,%xmm1
|
|
pandn %xmm2,%xmm0
|
|
movdqa %xmm4,%xmm2
|
|
pandn %xmm3,%xmm1
|
|
movdqa %xmm4,%xmm3
|
|
pand 384(%rsp),%xmm2
|
|
pand 384+16(%rsp),%xmm3
|
|
por %xmm0,%xmm2
|
|
por %xmm1,%xmm3
|
|
movdqu %xmm2,64(%rdi)
|
|
movdqu %xmm3,80(%rdi)
|
|
|
|
movdqa %xmm5,%xmm0
|
|
movdqa %xmm5,%xmm1
|
|
pandn 224(%rsp),%xmm0
|
|
movdqa %xmm5,%xmm2
|
|
pandn 224+16(%rsp),%xmm1
|
|
movdqa %xmm5,%xmm3
|
|
pand 416(%rsp),%xmm2
|
|
pand 416+16(%rsp),%xmm3
|
|
por %xmm0,%xmm2
|
|
por %xmm1,%xmm3
|
|
|
|
movdqa %xmm4,%xmm0
|
|
movdqa %xmm4,%xmm1
|
|
pandn %xmm2,%xmm0
|
|
movdqa %xmm4,%xmm2
|
|
pandn %xmm3,%xmm1
|
|
movdqa %xmm4,%xmm3
|
|
pand 320(%rsp),%xmm2
|
|
pand 320+16(%rsp),%xmm3
|
|
por %xmm0,%xmm2
|
|
por %xmm1,%xmm3
|
|
movdqu %xmm2,0(%rdi)
|
|
movdqu %xmm3,16(%rdi)
|
|
|
|
movdqa %xmm5,%xmm0
|
|
movdqa %xmm5,%xmm1
|
|
pandn 256(%rsp),%xmm0
|
|
movdqa %xmm5,%xmm2
|
|
pandn 256+16(%rsp),%xmm1
|
|
movdqa %xmm5,%xmm3
|
|
pand 448(%rsp),%xmm2
|
|
pand 448+16(%rsp),%xmm3
|
|
por %xmm0,%xmm2
|
|
por %xmm1,%xmm3
|
|
|
|
movdqa %xmm4,%xmm0
|
|
movdqa %xmm4,%xmm1
|
|
pandn %xmm2,%xmm0
|
|
movdqa %xmm4,%xmm2
|
|
pandn %xmm3,%xmm1
|
|
movdqa %xmm4,%xmm3
|
|
pand 352(%rsp),%xmm2
|
|
pand 352+16(%rsp),%xmm3
|
|
por %xmm0,%xmm2
|
|
por %xmm1,%xmm3
|
|
movdqu %xmm2,32(%rdi)
|
|
movdqu %xmm3,48(%rdi)
|
|
|
|
addq $480+8,%rsp
|
|
popq %r15
|
|
popq %r14
|
|
popq %r13
|
|
popq %r12
|
|
popq %rbx
|
|
popq %rbp
|
|
.byte 0xf3,0xc3
|
|
|
|
#if defined(__linux__) && defined(__ELF__)
|
|
.section .note.GNU-stack,"",@progbits
|
|
#endif
|