Update.
[glibc.git] / sysdeps / s390 / mul_1.S
blob180411474154434fddfbef7bc6903c6dd8a8bf9e
1 /* i80386 __mpn_mul_1 -- Multiply a limb vector with a limb and store
2    the result in a second limb vector.
3    Copyright (C) 2000 Free Software Foundation, Inc.
4    Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
5    This file is part of the GNU MP Library.
7    The GNU MP Library is free software; you can redistribute it and/or modify
8    it under the terms of the GNU Library General Public License as published by
9    the Free Software Foundation; either version 2 of the License, or (at your
10    option) any later version.
12    The GNU MP Library is distributed in the hope that it will be useful, but
13    WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
14    or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Library General Public
15    License for more details.
17    You should have received a copy of the GNU Library General Public License
18    along with the GNU MP Library; see the file COPYING.LIB.  If not, write to
19    the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
20    MA 02111-1307, USA.  */
23    INPUT PARAMETERS
24    res_ptr   %r2
25    s1_ptr    %r3
26    size      %r4
27    s2_limb   %r5
30 #include <sysdep.h>
31 #include "asm-syntax.h"
33         .text
34 ENTRY(__mpn_mul_1)
35         st     %r6,24(%r15)
36         slr    %r6,%r6            # cy_limb = 0
37 .L0:    icm    %r1,15,0(%r3)      # get s1_ptr[i]
38         mr     %r0,%r5            # umul_ppmm(prod_high,prod_low,s1_ptr[j],s2_limb)
39         jnm    .L1
40         alr    %r0,%r5
41 .L1:    ltr    %r5,%r5
42         jnm    .L2
43         al     %r0,0(%r3)
44 .L2:    alr    %r1,%r6            # prod_low += cy_limb
45         lr     %r6,%r0            # cy_limb = prod_high
46         brc    12,.L3
47         ahi    %r6,1              #           + (prod_low < cy_limb)
48 .L3:    st     %r1,0(%r2)
49         la     %r2,4(0,%r2)
50         la     %r3,4(0,%r3)
51         brct   %r4,.L0
52         lr     %r2,%r6            # return cy_limb
53         l      %r6,24(%r15)
54 .Lexit: br     %r14
55 END(__mpn_mul_1)