source: grub-pc/trunk/fuentes/grub-core/lib/libgcrypt/mpi/i586/mpih-sub1.S @ 22

Last change on this file since 22 was 22, checked in by mabarracus, 4 years ago

updated version and apply net.ifnames=0 into debian/rules

File size: 3.1 KB
Line 
1/* i80586 sub_n -- Sub two limb vectors of the same length > 0 and store
2 *                 sum in a third limb vector.
3 *
4 *      Copyright (C) 1992, 1994, 1995, 1998,
5 *                    2001, 2002 Free Software Foundation, Inc.
6 *
7 * This file is part of Libgcrypt.
8 *
9 * Libgcrypt is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU Lesser General Public License as
11 * published by the Free Software Foundation; either version 2.1 of
12 * the License, or (at your option) any later version.
13 *
14 * Libgcrypt is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17 * GNU Lesser General Public License for more details.
18 *
19 * You should have received a copy of the GNU Lesser General Public
20 * License along with this program; if not, write to the Free Software
21 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
22 *
23 * Note: This code is heavily based on the GNU MP Library.
24 *       Actually it's the same code with only minor changes in the
25 *       way the data is stored; this is to support the abstraction
26 *       of an optional secure memory allocation which may be used
27 *       to avoid revealing of sensitive data due to paging etc.
28 */
29
30
31#include "sysdep.h"
32#include "asm-syntax.h"
33
34
35/*******************
36 *  mpi_limb_t
37 *  _gcry_mpih_sub_n( mpi_ptr_t res_ptr,        (sp + 4)
38 *                 mpi_ptr_t s1_ptr,    (sp + 8)
39 *                 mpi_ptr_t s2_ptr,    (sp + 12)
40 *                 mpi_size_t size)     (sp + 16)
41 */
42
43
44.text
45        ALIGN (3)
46        .globl C_SYMBOL_NAME(_gcry_mpih_sub_n)
47C_SYMBOL_NAME(_gcry_mpih_sub_n:)
48
49        pushl   %edi
50        pushl   %esi
51        pushl   %ebx
52        pushl   %ebp
53
54        movl    20(%esp),%edi           /* res_ptr */
55        movl    24(%esp),%esi           /* s1_ptr */
56        movl    28(%esp),%ebp           /* s2_ptr */
57        movl    32(%esp),%ecx           /* size */
58
59        movl    (%ebp),%ebx
60
61        decl    %ecx
62        movl    %ecx,%edx
63        shrl    $3,%ecx
64        andl    $7,%edx
65        testl   %ecx,%ecx               /* zero carry flag */
66        jz      Lend
67        pushl   %edx
68
69        ALIGN (3)
70Loop:   movl    28(%edi),%eax           /* fetch destination cache line */
71        leal    32(%edi),%edi
72
73L1:     movl    (%esi),%eax
74        movl    4(%esi),%edx
75        sbbl    %ebx,%eax
76        movl    4(%ebp),%ebx
77        sbbl    %ebx,%edx
78        movl    8(%ebp),%ebx
79        movl    %eax,-32(%edi)
80        movl    %edx,-28(%edi)
81
82L2:     movl    8(%esi),%eax
83        movl    12(%esi),%edx
84        sbbl    %ebx,%eax
85        movl    12(%ebp),%ebx
86        sbbl    %ebx,%edx
87        movl    16(%ebp),%ebx
88        movl    %eax,-24(%edi)
89        movl    %edx,-20(%edi)
90
91L3:     movl    16(%esi),%eax
92        movl    20(%esi),%edx
93        sbbl    %ebx,%eax
94        movl    20(%ebp),%ebx
95        sbbl    %ebx,%edx
96        movl    24(%ebp),%ebx
97        movl    %eax,-16(%edi)
98        movl    %edx,-12(%edi)
99
100L4:     movl    24(%esi),%eax
101        movl    28(%esi),%edx
102        sbbl    %ebx,%eax
103        movl    28(%ebp),%ebx
104        sbbl    %ebx,%edx
105        movl    32(%ebp),%ebx
106        movl    %eax,-8(%edi)
107        movl    %edx,-4(%edi)
108
109        leal    32(%esi),%esi
110        leal    32(%ebp),%ebp
111        decl    %ecx
112        jnz     Loop
113
114        popl    %edx
115Lend:
116        decl    %edx                    /* test %edx w/o clobbering carry */
117        js      Lend2
118        incl    %edx
119Loop2:
120        leal    4(%edi),%edi
121        movl    (%esi),%eax
122        sbbl    %ebx,%eax
123        movl    4(%ebp),%ebx
124        movl    %eax,-4(%edi)
125        leal    4(%esi),%esi
126        leal    4(%ebp),%ebp
127        decl    %edx
128        jnz     Loop2
129Lend2:
130        movl    (%esi),%eax
131        sbbl    %ebx,%eax
132        movl    %eax,(%edi)
133
134        sbbl    %eax,%eax
135        negl    %eax
136
137        popl    %ebp
138        popl    %ebx
139        popl    %esi
140        popl    %edi
141        ret
142
Note: See TracBrowser for help on using the repository browser.