source: grub-pc/trunk/fuentes/grub-core/lib/libgcrypt/mpi/powerpc32/mpih-mul2.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.6 KB
Line 
1/* PowerPC-32 addmul_1 -- Multiply a limb vector with a limb and add
2 *                        the result to a second limb vector.
3 *
4 *      Copyright (C) 1995, 1998, 2002 Free Software Foundation, Inc.
5 *
6 * This file is part of Libgcrypt.
7 *
8 * Libgcrypt is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU Lesser General Public License as
10 * published by the Free Software Foundation; either version 2.1 of
11 * the License, or (at your option) any later version.
12 *
13 * Libgcrypt is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 * GNU Lesser General Public License for more details.
17 *
18 * You should have received a copy of the GNU Lesser General Public
19 * License along with this program; if not, write to the Free Software
20 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
21 */
22
23#include "sysdep.h"
24#include "asm-syntax.h"
25
26
27#ifndef USE_PPC_PATCHES
28
29/*******************
30 * mpi_limb_t
31 * _gcry_mpih_addmul_1( mpi_ptr_t res_ptr,      (r3)
32 *                   mpi_ptr_t s1_ptr,       (r4)
33 *                   mpi_size_t s1_size,     (r5)
34 *                   mpi_limb_t s2_limb)     (r6)
35 *
36 * This is a fairly straightforward implementation.  The timing of the PC601
37 * is hard to understand, so I will wait to optimize this until I have some
38 * hardware to play with.
39 *
40 * The code trivially generalizes to 64 bit limbs for the PC620.
41 */
42
43
44        .toc
45        .csect ._gcry_mpih_addmul_1[PR]
46        .align 2
47        .globl _gcry_mpih_addmul_1
48        .globl ._gcry_mpih_addmul_1
49        .csect _gcry_mpih_addmul_1[DS]
50_gcry_mpih_addmul_1:
51        .long ._gcry_mpih_addmul_1[PR], TOC[tc0], 0
52        .csect ._gcry_mpih_addmul_1[PR]
53._gcry_mpih_addmul_1:
54        mtctr   5
55
56        lwz     0,0(4)
57        mullw   7,0,6
58        mulhwu  10,0,6
59        lwz     9,0(3)
60        addc    8,7,9
61        addi    3,3,-4
62        bdz     Lend
63
64Loop:   lwzu    0,4(4)
65        stwu    8,4(3)
66        mullw   8,0,6
67        adde    7,8,10
68        mulhwu  10,0,6
69        lwz     9,4(3)
70        addze   10,10
71        addc    8,7,9
72        bdnz    Loop
73
74Lend:   stw     8,4(3)
75        addze   3,10
76        blr
77
78#else
79/* Multiply a limb vector by a single limb, for PowerPC.
80   Copyright (C) 1993, 1994, 1995, 1997 Free Software Foundation, Inc.
81   This file is part of the GNU C Library.
82
83   The GNU C Library is free software; you can redistribute it and/or
84   modify it under the terms of the GNU Library General Public License as
85   published by the Free Software Foundation; either version 2 of the
86   License, or (at your option) any later version.
87
88   The GNU C Library is distributed in the hope that it will be useful,
89   but WITHOUT ANY WARRANTY; without even the implied warranty of
90   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
91   Library General Public License for more details.
92
93   You should have received a copy of the GNU Library General Public
94   License along with the GNU C Library; see the file COPYING.LIB.  If not,
95   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
96   Boston, MA 02111-1307, USA.  */
97
98
99/* mp_limb_t mpn_addmul_1 (mp_ptr res_ptr, mp_srcptr s1_ptr,
100                           mp_size_t s1_size, mp_limb_t s2_limb)
101   Calculate res+s1*s2 and put result back in res; return carry.  */
102ENTRY(_gcry_mpih_addmul_1)
103       mtctr   %r5
104
105       lwz     %r0,0(%r4)
106       mullw   %r7,%r0,%r6
107       mulhwu  %r10,%r0,%r6
108       lwz     %r9,0(%r3)
109       addc    %r8,%r7,%r9
110       addi    %r3,%r3,-4              /* adjust res_ptr */
111       bdz     1f
112
1130:     lwzu    %r0,4(%r4)
114       stwu    %r8,4(%r3)
115       mullw   %r8,%r0,%r6
116       adde    %r7,%r8,%r10
117       mulhwu  %r10,%r0,%r6
118       lwz     %r9,4(%r3)
119       addze   %r10,%r10
120       addc    %r8,%r7,%r9
121       bdnz    0b
122
1231:     stw     %r8,4(%r3)
124       addze   %r3,%r10
125       blr
126END(_gcry_mpih_addmul_1)
127#endif
Note: See TracBrowser for help on using the repository browser.