Home | History | Annotate | Line # | Download | only in p7
      1 dnl  PowerPC-64 mpn_addlshC_n, mpn_sublshC_n, mpn_rsblshC_n.
      2 
      3 dnl  Copyright 2003, 2005, 2009, 2010, 2013 Free Software Foundation, Inc.
      4 
      5 dnl  This file is part of the GNU MP Library.
      6 dnl
      7 dnl  The GNU MP Library is free software; you can redistribute it and/or modify
      8 dnl  it under the terms of either:
      9 dnl
     10 dnl    * the GNU Lesser General Public License as published by the Free
     11 dnl      Software Foundation; either version 3 of the License, or (at your
     12 dnl      option) any later version.
     13 dnl
     14 dnl  or
     15 dnl
     16 dnl    * the GNU General Public License as published by the Free Software
     17 dnl      Foundation; either version 2 of the License, or (at your option) any
     18 dnl      later version.
     19 dnl
     20 dnl  or both in parallel, as here.
     21 dnl
     22 dnl  The GNU MP Library is distributed in the hope that it will be useful, but
     23 dnl  WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
     24 dnl  or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
     25 dnl  for more details.
     26 dnl
     27 dnl  You should have received copies of the GNU General Public License and the
     28 dnl  GNU Lesser General Public License along with the GNU MP Library.  If not,
     29 dnl  see https://www.gnu.org/licenses/.
     30 
     31 C                  cycles/limb
     32 C POWER3/PPC630          ?
     33 C POWER4/PPC970          ?
     34 C POWER5                 ?
     35 C POWER6                 ?
     36 C POWER7                 2.5
     37 
     38 C INPUT PARAMETERS
     39 define(`rp', `r3')
     40 define(`up', `r4')
     41 define(`vp', `r5')
     42 define(`n',  `r6')
     43 
     44 ifdef(`DO_add', `
     45   define(`ADDSUBC',	`addc	$1, $2, $3')
     46   define(`ADDSUBE',	`adde	$1, $2, $3')
     47   define(INITCY,	`addic	$1, r1, 0')
     48   define(RETVAL,	`addze	r3, $1')
     49   define(`func',	mpn_addlsh`'LSH`'_n)')
     50 ifdef(`DO_sub', `
     51   define(`ADDSUBC',	`subfc	$1, $2, $3')
     52   define(`ADDSUBE',	`subfe	$1, $2, $3')
     53   define(INITCY,	`addic	$1, r1, -1')
     54   define(RETVAL,	`subfze	r3, $1
     55 			neg	r3, r3')
     56   define(`func',	mpn_sublsh`'LSH`'_n)')
     57 ifdef(`DO_rsb', `
     58   define(`ADDSUBC',	`subfc	$1, $3, $2')
     59   define(`ADDSUBE',	`subfe	$1, $3, $2')
     60   define(INITCY,	`addic	$1, r1, -1')
     61   define(RETVAL,	`addme	r3, $1')
     62   define(`func',	mpn_rsblsh`'LSH`'_n)')
     63 
     64 define(`s0', `r0')  define(`s1', `r9')
     65 define(`u0', `r6')  define(`u1', `r7')
     66 define(`v0', `r10') define(`v1', `r11')
     67 
     68 
     69 ASM_START()
     70 PROLOGUE(func)
     71 	rldic	r7, n, 3, 59
     72 	add	up, up, r7
     73 	add	vp, vp, r7
     74 	add	rp, rp, r7
     75 
     76 ifdef(`DO_add', `
     77 	addic	r0, n, 3	C set cy flag as side effect
     78 ',`
     79 	subfc	r0, r0, r0	C set cy flag
     80 	addi	r0, n, 3
     81 ')
     82 	srdi	r0, r0, 2
     83 	mtctr	r0
     84 
     85 	andi.	r0, n, 1
     86 	beq	L(bx0)
     87 
     88 L(bx1):	andi.	r0, n, 2
     89 	li	s0, 0
     90 	bne	L(lo3)
     91 	b	L(lo1)
     92 
     93 L(bx0):	andi.	r0, n, 2
     94 	li	s1, 0
     95 	bne	L(lo2)
     96 
     97 	ALIGN(32)
     98 L(top):	addi	rp, rp, 32
     99 	ld	v0, 0(vp)
    100 	addi	vp, vp, 32
    101 	rldimi	s1, v0, LSH, 0
    102 	ld	u0, 0(up)
    103 	addi	up, up, 32
    104 	srdi	s0, v0, RSH
    105 	ADDSUBE(s1, s1, u0)
    106 	std	s1, -32(rp)
    107 L(lo3):	ld	v1, -24(vp)
    108 	rldimi	s0, v1, LSH, 0
    109 	ld	u1, -24(up)
    110 	srdi	s1, v1, RSH
    111 	ADDSUBE(s0, s0, u1)
    112 	std	s0, -24(rp)
    113 L(lo2):	ld	v0, -16(vp)
    114 	rldimi	s1, v0, LSH, 0
    115 	ld	u0, -16(up)
    116 	srdi	s0, v0, RSH
    117 	ADDSUBE(s1, s1, u0)
    118 	std	s1, -16(rp)
    119 L(lo1):	ld	v1, -8(vp)
    120 	rldimi	s0, v1, LSH, 0
    121 	ld	u1, -8(up)
    122 	srdi	s1, v1, RSH
    123 	ADDSUBE(s0, s0, u1)
    124 	std	s0, -8(rp)
    125 	bdnz	L(top)		C decrement CTR and loop back
    126 
    127 	RETVAL(	s1)
    128 	blr
    129 EPILOGUE()
    130