Blame mpn/powerpc64/p7/copyd.asm
|
Packit |
5c3484 |
dnl PowerPC-64 mpn_copyd.
|
|
Packit |
5c3484 |
|
|
Packit |
5c3484 |
dnl Copyright 2004, 2005, 2013 Free Software Foundation, Inc.
|
|
Packit |
5c3484 |
|
|
Packit |
5c3484 |
dnl This file is part of the GNU MP Library.
|
|
Packit |
5c3484 |
dnl
|
|
Packit |
5c3484 |
dnl The GNU MP Library is free software; you can redistribute it and/or modify
|
|
Packit |
5c3484 |
dnl it under the terms of either:
|
|
Packit |
5c3484 |
dnl
|
|
Packit |
5c3484 |
dnl * the GNU Lesser General Public License as published by the Free
|
|
Packit |
5c3484 |
dnl Software Foundation; either version 3 of the License, or (at your
|
|
Packit |
5c3484 |
dnl option) any later version.
|
|
Packit |
5c3484 |
dnl
|
|
Packit |
5c3484 |
dnl or
|
|
Packit |
5c3484 |
dnl
|
|
Packit |
5c3484 |
dnl * the GNU General Public License as published by the Free Software
|
|
Packit |
5c3484 |
dnl Foundation; either version 2 of the License, or (at your option) any
|
|
Packit |
5c3484 |
dnl later version.
|
|
Packit |
5c3484 |
dnl
|
|
Packit |
5c3484 |
dnl or both in parallel, as here.
|
|
Packit |
5c3484 |
dnl
|
|
Packit |
5c3484 |
dnl The GNU MP Library is distributed in the hope that it will be useful, but
|
|
Packit |
5c3484 |
dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
|
Packit |
5c3484 |
dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
|
Packit |
5c3484 |
dnl for more details.
|
|
Packit |
5c3484 |
dnl
|
|
Packit |
5c3484 |
dnl You should have received copies of the GNU General Public License and the
|
|
Packit |
5c3484 |
dnl GNU Lesser General Public License along with the GNU MP Library. If not,
|
|
Packit |
5c3484 |
dnl see https://www.gnu.org/licenses/.
|
|
Packit |
5c3484 |
|
|
Packit |
5c3484 |
include(`../config.m4')
|
|
Packit |
5c3484 |
|
|
Packit |
5c3484 |
C cycles/limb
|
|
Packit |
5c3484 |
C POWER3/PPC630 ?
|
|
Packit |
5c3484 |
C POWER4/PPC970 ?
|
|
Packit |
5c3484 |
C POWER5 ?
|
|
Packit |
5c3484 |
C POWER6 1.25
|
|
Packit |
5c3484 |
C POWER7 1.09
|
|
Packit |
5c3484 |
|
|
Packit |
5c3484 |
C INPUT PARAMETERS
|
|
Packit |
5c3484 |
define(`rp', `r3')
|
|
Packit |
5c3484 |
define(`up', `r4')
|
|
Packit |
5c3484 |
define(`n', `r5')
|
|
Packit |
5c3484 |
|
|
Packit |
5c3484 |
ASM_START()
|
|
Packit |
5c3484 |
PROLOGUE(mpn_copyd)
|
|
Packit |
5c3484 |
|
|
Packit |
5c3484 |
ifdef(`HAVE_ABI_mode32',
|
|
Packit |
5c3484 |
` rldicl n, n, 0,32')
|
|
Packit |
5c3484 |
|
|
Packit |
5c3484 |
sldi r0, n, 3
|
|
Packit |
5c3484 |
add up, up, r0 C point at u[] end
|
|
Packit |
5c3484 |
add rp, rp, r0 C point at r[] end
|
|
Packit |
5c3484 |
|
|
Packit |
5c3484 |
cmpdi cr0, n, 4
|
|
Packit |
5c3484 |
blt L(sml)
|
|
Packit |
5c3484 |
|
|
Packit |
5c3484 |
addi r10, n, 4
|
|
Packit |
5c3484 |
srdi r10, r10, 3
|
|
Packit |
5c3484 |
mtctr r10
|
|
Packit |
5c3484 |
|
|
Packit |
5c3484 |
andi. r0, n, 1
|
|
Packit |
5c3484 |
rlwinm r11, n, 0,30,30
|
|
Packit |
5c3484 |
rlwinm r12, n, 0,29,29
|
|
Packit |
5c3484 |
cmpdi cr6, r11, 0
|
|
Packit |
5c3484 |
cmpdi cr7, r12, 0
|
|
Packit |
5c3484 |
|
|
Packit |
5c3484 |
beq cr0, L(xx0)
|
|
Packit |
5c3484 |
L(xx1): ld r6, -8(up)
|
|
Packit |
5c3484 |
addi up, up, -8
|
|
Packit |
5c3484 |
std r6, -8(rp)
|
|
Packit |
5c3484 |
addi rp, rp, -8
|
|
Packit |
5c3484 |
|
|
Packit |
5c3484 |
L(xx0): bne cr6, L(x10)
|
|
Packit |
5c3484 |
L(x00): ld r6, -8(up)
|
|
Packit |
5c3484 |
ld r7, -16(up)
|
|
Packit |
5c3484 |
bne cr7, L(100)
|
|
Packit |
5c3484 |
L(000): addi rp, rp, 32
|
|
Packit |
5c3484 |
b L(lo0)
|
|
Packit |
5c3484 |
L(100): addi up, up, 32
|
|
Packit |
5c3484 |
b L(lo4)
|
|
Packit |
5c3484 |
L(x10): ld r8, -8(up)
|
|
Packit |
5c3484 |
ld r9, -16(up)
|
|
Packit |
5c3484 |
bne cr7, L(110)
|
|
Packit |
5c3484 |
L(010): addi up, up, -16
|
|
Packit |
5c3484 |
addi rp, rp, 16
|
|
Packit |
5c3484 |
b L(lo2)
|
|
Packit |
5c3484 |
L(110): addi up, up, 16
|
|
Packit |
5c3484 |
addi rp, rp, 48
|
|
Packit |
5c3484 |
b L(lo6)
|
|
Packit |
5c3484 |
|
|
Packit |
5c3484 |
L(sml): cmpdi cr0, n, 0
|
|
Packit |
5c3484 |
beqlr- cr0
|
|
Packit |
5c3484 |
mtctr n
|
|
Packit |
5c3484 |
L(t): ld r6, -8(up)
|
|
Packit |
5c3484 |
addi up, up, -8
|
|
Packit |
5c3484 |
std r6, -8(rp)
|
|
Packit |
5c3484 |
addi rp, rp, -8
|
|
Packit |
5c3484 |
bdnz L(t)
|
|
Packit |
5c3484 |
blr
|
|
Packit |
5c3484 |
|
|
Packit |
5c3484 |
ALIGN(32)
|
|
Packit |
5c3484 |
L(top): std r6, -8(rp)
|
|
Packit |
5c3484 |
std r7, -16(rp)
|
|
Packit |
5c3484 |
L(lo2): ld r6, -8(up)
|
|
Packit |
5c3484 |
ld r7, -16(up)
|
|
Packit |
5c3484 |
std r8, -24(rp)
|
|
Packit |
5c3484 |
std r9, -32(rp)
|
|
Packit |
5c3484 |
L(lo0): ld r8, -24(up)
|
|
Packit |
5c3484 |
ld r9, -32(up)
|
|
Packit |
5c3484 |
std r6, -40(rp)
|
|
Packit |
5c3484 |
std r7, -48(rp)
|
|
Packit |
5c3484 |
L(lo6): ld r6, -40(up)
|
|
Packit |
5c3484 |
ld r7, -48(up)
|
|
Packit |
5c3484 |
std r8, -56(rp)
|
|
Packit |
5c3484 |
std r9, -64(rp)
|
|
Packit |
5c3484 |
addi rp, rp, -64
|
|
Packit |
5c3484 |
L(lo4): ld r8, -56(up)
|
|
Packit |
5c3484 |
ld r9, -64(up)
|
|
Packit |
5c3484 |
addi up, up, -64
|
|
Packit |
5c3484 |
bdnz L(top)
|
|
Packit |
5c3484 |
|
|
Packit |
5c3484 |
L(end): std r6, -8(rp)
|
|
Packit |
5c3484 |
std r7, -16(rp)
|
|
Packit |
5c3484 |
std r8, -24(rp)
|
|
Packit |
5c3484 |
std r9, -32(rp)
|
|
Packit |
5c3484 |
blr
|
|
Packit |
5c3484 |
EPILOGUE()
|