~ubuntu-branches/ubuntu/vivid/nettle/vivid-proposed

« back to all changes in this revision

Viewing changes to x86_64/ecc-521-modp.asm

  • Committer: Package Import Robot
  • Author(s): Magnus Holmgren
  • Date: 2013-05-04 19:50:28 UTC
  • mfrom: (1.4.6) (3.1.11 experimental)
  • mto: This revision was merged to the branch mainline in revision 14.
  • Revision ID: package-import@ubuntu.com-20130504195028-fp6c9fw1tsm5scwa
Tags: 2.7-1
* New upstream release (Closes: #706081).
* Include watch file improvements from Bart Martens <bartm@debian.org>
  via the QA system.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
C nettle, low-level cryptographics library
 
2
C
 
3
C Copyright (C) 2013 Niels Möller
 
4
C
 
5
C The nettle library is free software; you can redistribute it and/or modify
 
6
C it under the terms of the GNU Lesser General Public License as published by
 
7
C the Free Software Foundation; either version 2.1 of the License, or (at your
 
8
C option) any later version.
 
9
C
 
10
C The nettle library is distributed in the hope that it will be useful, but
 
11
C WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
 
12
C or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
 
13
C License for more details.
 
14
C
 
15
C You should have received a copy of the GNU Lesser General Public License
 
16
C along with the nettle library; see the file COPYING.LIB.  If not, write to
 
17
C the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
 
18
C MA 02111-1301, USA.
 
19
 
 
20
        .file "ecc-521-modp.asm"
 
21
 
 
22
define(<RP>, <%rsi>)
 
23
define(<U0>, <%rax>)
 
24
define(<U1>, <%rbx>)
 
25
define(<U2>, <%rcx>)
 
26
define(<U3>, <%rdx>)
 
27
define(<U4>, <%rbp>)
 
28
define(<U5>, <%rdi>)
 
29
define(<U6>, <%r8>)
 
30
define(<U7>, <%r9>)
 
31
define(<U8>, <%r10>)
 
32
define(<U9>, <%r11>)
 
33
define(<T0>, <%r12>)
 
34
define(<T1>, <%r13>)
 
35
 
 
36
PROLOGUE(nettle_ecc_521_modp)
 
37
        W64_ENTRY(2, 0)
 
38
        push    %rbx
 
39
        push    %rbp
 
40
        push    %r12
 
41
        push    %r13
 
42
 
 
43
        C Read top 17 limbs, shift left 55 bits
 
44
        mov     72(RP), U1
 
45
        mov     U1, U0
 
46
        shl     $55, U0
 
47
        shr     $9, U1
 
48
 
 
49
        mov     80(RP), U2
 
50
        mov     U2, T0
 
51
        shr     $9, U2
 
52
        shl     $55, T0
 
53
        or      T0, U1
 
54
 
 
55
        mov     88(RP), U3
 
56
        mov     U3, T0
 
57
        shr     $9, U3
 
58
        shl     $55, T0
 
59
        or      T0, U2
 
60
 
 
61
        mov     96(RP), U4
 
62
        mov     U4, T0
 
63
        shr     $9, U4
 
64
        shl     $55, T0
 
65
        or      T0, U3
 
66
 
 
67
        mov     104(RP), U5
 
68
        mov     U5, T0
 
69
        shr     $9, U5
 
70
        shl     $55, T0
 
71
        or      T0, U4
 
72
 
 
73
        mov     112(RP), U6
 
74
        mov     U6, T0
 
75
        shr     $9, U6
 
76
        shl     $55, T0
 
77
        or      T0, U5
 
78
 
 
79
        mov     120(RP), U7
 
80
        mov     U7, T0
 
81
        shr     $9, U7
 
82
        shl     $55, T0
 
83
        or      T0, U6
 
84
 
 
85
        mov     128(RP), U8
 
86
        mov     U8, T0
 
87
        shr     $9, U8
 
88
        shl     $55, T0
 
89
        or      T0, U7
 
90
 
 
91
        mov     136(RP), U9
 
92
        mov     U9, T0
 
93
        shr     $9, U9
 
94
        shl     $55, T0
 
95
        or      T0, U8
 
96
 
 
97
        add       (RP), U0
 
98
        adc      8(RP), U1
 
99
        adc     16(RP), U2
 
100
        adc     24(RP), U3
 
101
        adc     32(RP), U4
 
102
        adc     40(RP), U5
 
103
        adc     48(RP), U6
 
104
        adc     56(RP), U7
 
105
        adc     64(RP), U8
 
106
        adc     $0, U9
 
107
 
 
108
        C Top limbs are <U9, U8>. Keep low 9 bits of 8, and fold the
 
109
        C top bits (at most 65 bits).
 
110
        mov     U8, T0
 
111
        shr     $9, T0
 
112
        and     $0x1ff, U8
 
113
        mov     U9, T1
 
114
        shl     $55, U9
 
115
        shr     $9, T1
 
116
        or      U9, T0
 
117
 
 
118
        add     T0, U0
 
119
        mov     U0, (RP)
 
120
        adc     T1, U1
 
121
        mov     U1, 8(RP)
 
122
        adc     $0, U2
 
123
        mov     U2, 16(RP)
 
124
        adc     $0, U3
 
125
        mov     U3, 24(RP)
 
126
        adc     $0, U4
 
127
        mov     U4, 32(RP)
 
128
        adc     $0, U5
 
129
        mov     U5, 40(RP)
 
130
        adc     $0, U6
 
131
        mov     U6, 48(RP)
 
132
        adc     $0, U7
 
133
        mov     U7, 56(RP)
 
134
        adc     $0, U8
 
135
        mov     U8, 64(RP)
 
136
 
 
137
        pop     %r13
 
138
        pop     %r12
 
139
        pop     %rbp
 
140
        pop     %rbx
 
141
        W64_EXIT(2, 0)
 
142
        ret
 
143
EPILOGUE(nettle_ecc_521_modp)