Annotation of OpenXM_contrib/gmp/mpn/ia64/sub_n.asm, Revision 1.1
1.1 ! ohara 1: dnl IA-64 mpn_sub_n -- Subtract two limb vectors of the same length > 0 and
! 2: dnl store difference in a third limb vector.
! 3:
! 4: dnl Copyright 2000, 2001, 2002 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 rp = r32
! 27: C up = r33
! 28: C vp = r34
! 29: C n = r35
! 30:
! 31: C cycles/limb
! 32: C Itanium: 6
! 33: C Itanium 2: ?
! 34:
! 35:
! 36: ASM_START()
! 37: PROLOGUE(mpn_sub_n)
! 38: .prologue
! 39: ifdef(`HAVE_ABI_32',
! 40: ` addp4 r32 = 0, r32
! 41: addp4 r33 = 0, r33
! 42: addp4 r34 = 0, r34
! 43: sxt4 r35 = r35
! 44: ;;
! 45: ')
! 46: { .mib; cmp.eq p6, p7 = 1, r35
! 47: add r35 = -2, r35
! 48: nop.b 0
! 49: } { .mib; cmp.ne p8, p9 = r0, r0
! 50: .save ar.lc, r2
! 51: mov r2 = ar.lc
! 52: .body
! 53: nop.b 0 ;;
! 54: } { .mib; ld8 r16 = [r33], 8
! 55: mov ar.lc = r35
! 56: nop.b 0
! 57: } { .mib; ld8 r17 = [r34], 8
! 58: nop.i 0
! 59: (p6) br.dptk .Lend ;;
! 60: }
! 61: .align 32
! 62: .Loop:
! 63: .pred.rel "mutex",p8,p9
! 64: { .mii; mov r20 = r16
! 65: (p8) sub r19 = r16, r17, 1
! 66: (p9) sub r19 = r16, r17 ;;
! 67: } { .mfi; ld8 r16 = [r33], 8
! 68: nop.f 0
! 69: (p8) cmp.leu p6, p7 = r20, r19
! 70: } { .mfi; ld8 r17 = [r34], 8
! 71: nop.f 0
! 72: (p9) cmp.ltu p6, p7 = r20, r19
! 73: } { .mbb; st8 [r32] = r19, 8
! 74: nop.b 0
! 75: br.cloop.dptk .Loopm ;;
! 76: }
! 77: .pred.rel "mutex",p6,p7
! 78: { .mfi; (p6) sub r19 = r16, r17, 1
! 79: nop.f 0
! 80: (p7) sub r19 = r16, r17 ;;
! 81: } { .mii; st8 [r32] = r19
! 82: (p6) cmp.leu p8, p9 = r16, r19
! 83: (p7) cmp.ltu p8, p9 = r16, r19 ;;
! 84: }
! 85: .pred.rel "mutex",p8,p9
! 86: { .mfi; (p8) mov r8 = 1
! 87: nop.f 0
! 88: (p9) mov r8 = 0
! 89: }
! 90: mov ar.lc = r2
! 91: br.ret.sptk.many b0
! 92: .Loopm:
! 93: .pred.rel "mutex",p6,p7
! 94: { .mii; mov r20 = r16
! 95: (p6) sub r19 = r16, r17, 1
! 96: (p7) sub r19 = r16, r17 ;;
! 97: } { .mfi; ld8 r16 = [r33], 8
! 98: nop.f 0
! 99: (p6) cmp.leu p8, p9 = r20, r19
! 100: } { .mfi; ld8 r17 = [r34], 8
! 101: nop.f 0
! 102: (p7) cmp.ltu p8, p9 = r20, r19
! 103: } { .mbb; st8 [r32] = r19, 8
! 104: nop.b 0
! 105: br.cloop.dptk .Loop ;;
! 106: }
! 107: .Lend:
! 108: .pred.rel "mutex",p8,p9
! 109: { .mfi; (p8) sub r19 = r16, r17, 1
! 110: nop.f 0
! 111: (p9) sub r19 = r16, r17 ;;
! 112: } { .mii; st8 [r32] = r19
! 113: (p8) cmp.leu p6, p7 = r16, r19
! 114: (p9) cmp.ltu p6, p7 = r16, r19 ;;
! 115: }
! 116: .pred.rel "mutex",p6,p7
! 117: { .mfi; (p6) mov r8 = 1
! 118: nop.f 0
! 119: (p7) mov r8 = 0
! 120: }
! 121: mov ar.lc = r2
! 122: br.ret.sptk.many b0
! 123: EPILOGUE(mpn_sub_n)
! 124: ASM_END()
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>