~ubuntu-branches/ubuntu/quantal/gclcvs/quantal

« back to all changes in this revision

Viewing changes to gmp3/mpn/hppa/hppa1_1/mul_1.asm

  • Committer: Bazaar Package Importer
  • Author(s): Camm Maguire
  • Date: 2004-06-24 15:13:46 UTC
  • Revision ID: james.westby@ubuntu.com-20040624151346-xh0xaaktyyp7aorc
Tags: 2.7.0-26
C_GC_OFFSET is 2 on m68k-linux

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
dnl  HP-PA 1.1 mpn_mul_1 -- Multiply a limb vector with a limb and store the
 
2
dnl  result in a second limb vector.
 
3
 
 
4
dnl  Copyright 1992, 1993, 1994, 2000, 2001 Free Software Foundation, Inc.
 
5
 
 
6
dnl  This file is part of the GNU MP Library.
 
7
 
 
8
dnl  The GNU MP Library is free software; you can redistribute it and/or modify
 
9
dnl  it under the terms of the GNU Lesser General Public License as published
 
10
dnl  by the Free Software Foundation; either version 2.1 of the License, or (at
 
11
dnl  your option) any later version.
 
12
 
 
13
dnl  The GNU MP Library is distributed in the hope that it will be useful, but
 
14
dnl  WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
 
15
dnl  or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
 
16
dnl  License for more details.
 
17
 
 
18
dnl  You should have received a copy of the GNU Lesser General Public License
 
19
dnl  along with the GNU MP Library; see the file COPYING.LIB.  If not, write to
 
20
dnl  the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
 
21
dnl  MA 02111-1307, USA.
 
22
 
 
23
include(`../config.m4')
 
24
 
 
25
C INPUT PARAMETERS
 
26
C res_ptr       r26
 
27
C s1_ptr        r25
 
28
C size          r24
 
29
C s2_limb       r23
 
30
 
 
31
C This runs at 9 cycles/limb on a PA7000.  With the used instructions, it can
 
32
C not become faster due to data cache contention after a store.  On the PA7100
 
33
C it runs at 7 cycles/limb.
 
34
 
 
35
C We could use fldds to read two limbs at a time from the S1 array, and that
 
36
C could bring down the times to 8.5 and 6.5 cycles/limb for the PA7000 and
 
37
C PA7100, respectively.  We don't do that since it does not seem worth the
 
38
C (alignment) troubles...
 
39
 
 
40
C At least the PA7100 is rumored to be able to deal with cache-misses without
 
41
C stalling instruction issue.  If this is true, and the cache is actually also
 
42
C lockup-free, we should use a deeper software pipeline, and load from S1 very
 
43
C early!  (The loads and stores to -12(sp) will surely be in the cache.)
 
44
 
 
45
ASM_START()
 
46
PROLOGUE(mpn_mul_1)
 
47
C       .callinfo       frame=64,no_calls
 
48
 
 
49
        ldo             64(%r30),%r30
 
50
        fldws,ma        4(%r25),%fr5
 
51
        stw             %r23,-16(%r30)          C move s2_limb ...
 
52
        addib,=         -1,%r24,L$just_one_limb
 
53
         fldws          -16(%r30),%fr4          C ... into fr4
 
54
        add             %r0,%r0,%r0             C clear carry
 
55
        xmpyu           %fr4,%fr5,%fr6
 
56
        fldws,ma        4(%r25),%fr7
 
57
        fstds           %fr6,-16(%r30)
 
58
        xmpyu           %fr4,%fr7,%fr8
 
59
        ldw             -12(%r30),%r19          C least significant limb in product
 
60
        ldw             -16(%r30),%r28
 
61
 
 
62
        fstds           %fr8,-16(%r30)
 
63
        addib,=         -1,%r24,L$end
 
64
         ldw            -12(%r30),%r1
 
65
 
 
66
C Main loop
 
67
        .label  L$loop
 
68
        fldws,ma        4(%r25),%fr5
 
69
        stws,ma         %r19,4(%r26)
 
70
        addc            %r28,%r1,%r19
 
71
        xmpyu           %fr4,%fr5,%fr6
 
72
        ldw             -16(%r30),%r28
 
73
        fstds           %fr6,-16(%r30)
 
74
        addib,<>        -1,%r24,L$loop
 
75
         ldw            -12(%r30),%r1
 
76
 
 
77
        .label  L$end
 
78
        stws,ma         %r19,4(%r26)
 
79
        addc            %r28,%r1,%r19
 
80
        ldw             -16(%r30),%r28
 
81
        stws,ma         %r19,4(%r26)
 
82
        addc            %r0,%r28,%r28
 
83
        bv              0(%r2)
 
84
         ldo            -64(%r30),%r30
 
85
 
 
86
        .label  L$just_one_limb
 
87
        xmpyu           %fr4,%fr5,%fr6
 
88
        fstds           %fr6,-16(%r30)
 
89
        ldw             -16(%r30),%r28
 
90
        ldo             -64(%r30),%r30
 
91
        bv              0(%r2)
 
92
         fstws          %fr6R,0(%r26)
 
93
EPILOGUE(mpn_mul_1)