[BACK]Return to copyi.asm CVS log [TXT][DIR] Up to [local] / OpenXM_contrib / gmp / mpn / ia64

Annotation of OpenXM_contrib/gmp/mpn/ia64/copyi.asm, Revision 1.1.1.1

1.1       ohara       1: dnl  IA-64 mpn_copyi -- copy limb vector, incrementing.
                      2:
                      3: dnl  Copyright 2001, 2002 Free Software Foundation, Inc.
                      4:
                      5: dnl  This file is part of the GNU MP Library.
                      6:
                      7: dnl  The GNU MP Library is free software; you can redistribute it and/or modify
                      8: dnl  it under the terms of the GNU Lesser General Public License as published
                      9: dnl  by the Free Software Foundation; either version 2.1 of the License, or (at
                     10: dnl  your option) any later version.
                     11:
                     12: dnl  The GNU MP Library is distributed in the hope that it will be useful, but
                     13: dnl  WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
                     14: dnl  or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
                     15: dnl  License for more details.
                     16:
                     17: dnl  You should have received a copy of the GNU Lesser General Public License
                     18: dnl  along with the GNU MP Library; see the file COPYING.LIB.  If not, write to
                     19: dnl  the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
                     20: dnl  MA 02111-1307, USA.
                     21:
                     22: include(`../config.m4')
                     23:
                     24: C INPUT PARAMETERS
                     25: C rp = r32
                     26: C sp = r33
                     27: C n = r34
                     28:
                     29: ASM_START()
                     30: PROLOGUE(mpn_copyi)
                     31:        .prologue
                     32:        .save ar.lc, r2
                     33:                mov     r2 = ar.lc
                     34:        .body
                     35: ifdef(`HAVE_ABI_32',
                     36: `              addp4   r32 = 0, r32
                     37:                addp4   r33 = 0, r33
                     38:                sxt4    r34 = r34
                     39:                ;;
                     40: ')
                     41:                and     r14 = 3, r34
                     42:                cmp.ge  p14, p15 = 3, r34
                     43:                add     r34 = -4, r34
                     44:                ;;
                     45:                cmp.eq  p8, p9 = 1, r14
                     46:                cmp.eq  p10, p11 = 2, r14
                     47:                cmp.eq  p12, p13 = 3, r14
                     48:                ;;
                     49:          (p8)  br.dptk .Lb01
                     50:          (p10) br.dptk .Lb10
                     51:          (p12) br.dptk .Lb11
                     52:
                     53: .Lb00: C  n = 4, 8, 12, ...
                     54:          (p14) br.dptk .Ls00
                     55:                ;;
                     56:                ld8     r16 = [r33], 8
                     57:                shr     r15 = r34, 2
                     58:                ;;
                     59:                ld8     r17 = [r33], 8
                     60:                mov     ar.lc = r15
                     61:                ;;
                     62:                ld8     r18 = [r33], 8
                     63:                ;;
                     64:                ld8     r19 = [r33], 8
                     65:                br.cloop.dptk .Loop
                     66:                ;;
                     67:                br.sptk .Lend
                     68:                ;;
                     69:
                     70: .Lb01: C  n = 1, 5, 9, 13, ...
                     71:                ld8     r19 = [r33], 8
                     72:                shr     r15 = r34, 2
                     73:          (p14) br.dptk .Ls01
                     74:                ;;
                     75:                ld8     r16 = [r33], 8
                     76:                mov     ar.lc = r15
                     77:                ;;
                     78:                ld8     r17 = [r33], 8
                     79:                ;;
                     80:                ld8     r18 = [r33], 8
                     81:                br.sptk .Li01
                     82:                ;;
                     83:
                     84: .Lb10: C  n = 2,6, 10, 14, ...
                     85:                ld8     r18 = [r33], 8
                     86:                shr     r15 = r34, 2
                     87:                ;;
                     88:                ld8     r19 = [r33], 8
                     89:                mov     ar.lc = r15
                     90:          (p14) br.dptk .Ls10
                     91:                ;;
                     92:                ld8     r16 = [r33], 8
                     93:                ;;
                     94:                ld8     r17 = [r33], 8
                     95:                br.sptk .Li10
                     96:                ;;
                     97:
                     98: .Lb11: C  n = 3, 7, 11, 15, ...
                     99:                ld8     r17 = [r33], 8
                    100:                shr     r15 = r34, 2
                    101:                ;;
                    102:                ld8     r18 = [r33], 8
                    103:                mov     ar.lc = r15
                    104:                ;;
                    105:                ld8     r19 = [r33], 8
                    106:          (p14) br.dptk .Ls11
                    107:                ;;
                    108:                ld8     r16 = [r33], 8
                    109:                br.sptk .Li11
                    110:                ;;
                    111:
                    112: .Loop:
                    113: .Li00:
                    114:   { .mmb;      st8     [r32] = r16, 8
                    115:                ld8     r16 = [r33], 8
                    116:                ;;
                    117: }
                    118: .Li11:
                    119:   { .mmb;      st8     [r32] = r17, 8
                    120:                ld8     r17 = [r33], 8
                    121:                ;;
                    122: }
                    123: .Li10:
                    124:   { .mmb;      st8     [r32] = r18, 8
                    125:                ld8     r18 = [r33], 8
                    126:                ;;
                    127: }
                    128: .Li01:
                    129:   { .mmb;      st8     [r32] = r19, 8
                    130:                ld8     r19 = [r33], 8
                    131:                br.cloop.dptk .Loop
                    132:                ;;
                    133: }
                    134: .Lend:         st8     [r32] = r16, 8
                    135:                ;;
                    136: .Ls11:         st8     [r32] = r17, 8
                    137:                ;;
                    138: .Ls10:         st8     [r32] = r18, 8
                    139:                ;;
                    140: .Ls01:         st8     [r32] = r19, 8
                    141: .Ls00:
                    142:                mov     ar.lc = r2
                    143:                br.ret.sptk.many rp
                    144: EPILOGUE(mpn_copyi)
                    145: ASM_END()

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>