Home | History | Annotate | Line # | Download | only in s390_64
      1 dnl  S/390-64 mpn_rshift.
      2 
      3 dnl  Copyright 2011, 2014 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 include(`../config.m4')
     32 
     33 C            cycles/limb
     34 C z900		 7
     35 C z990           3
     36 C z9		 ?
     37 C z10		 6
     38 C z196		 ?
     39 
     40 C NOTES
     41 C  * See notes in lshift.asm.
     42 
     43 C INPUT PARAMETERS
     44 define(`rp',	`%r2')
     45 define(`up',	`%r3')
     46 define(`n',	`%r4')
     47 define(`cnt',	`%r5')
     48 
     49 define(`tnc',	`%r6')
     50 
     51 ASM_START()
     52 PROLOGUE(mpn_rshift)
     53 	cghi	n, 3
     54 	jh	L(gt1)
     55 
     56 	stmg	%r6, %r7, 48(%r15)
     57 	larl	%r1, L(tab)-4
     58 	lcgr	tnc, cnt
     59 	sllg	n, n, 2
     60 	b	0(n,%r1)
     61 L(tab):	j	L(n1)
     62 	j	L(n2)
     63 	j	L(n3)
     64 
     65 L(n1):	lg	%r1, 0(up)
     66 	srlg	%r0, %r1, 0(cnt)
     67 	stg	%r0, 0(rp)
     68 	sllg	%r2, %r1, 0(tnc)
     69 	lg	%r6, 48(%r15)		C restoring r7 not needed
     70 	br	%r14
     71 
     72 L(n2):	lg	%r1, 0(up)
     73 	sllg	%r4, %r1, 0(tnc)
     74 	srlg	%r0, %r1, 0(cnt)
     75 	lg	%r1, 8(up)
     76 	sllg	%r7, %r1, 0(tnc)
     77 	ogr	%r7, %r0
     78 	srlg	%r0, %r1, 0(cnt)
     79 	stg	%r7, 0(rp)
     80 	stg	%r0, 8(rp)
     81 	lgr	%r2, %r4
     82 	lmg	%r6, %r7, 48(%r15)
     83 	br	%r14
     84 
     85 
     86 L(n3):	lg	%r1, 0(up)
     87 	sllg	%r4, %r1, 0(tnc)
     88 	srlg	%r0, %r1, 0(cnt)
     89 	lg	%r1, 8(up)
     90 	sllg	%r7, %r1, 0(tnc)
     91 	ogr	%r7, %r0
     92 	srlg	%r0, %r1, 0(cnt)
     93 	stg	%r7, 0(rp)
     94 	lg	%r1, 16(up)
     95 	sllg	%r7, %r1, 0(tnc)
     96 	ogr	%r7, %r0
     97 	srlg	%r0, %r1, 0(cnt)
     98 	stg	%r7, 8(rp)
     99 	stg	%r0, 16(rp)
    100 	lgr	%r2, %r4
    101 	lmg	%r6, %r7, 48(%r15)
    102 	br	%r14
    103 
    104 L(gt1):	stmg	%r6, %r13, 48(%r15)
    105 	lcgr	tnc, cnt		C tnc = -cnt
    106 
    107 	sllg	%r1, n, 3
    108 	srlg	%r0, n, 2		C loop count
    109 
    110 	lghi	%r7, 3
    111 	ngr	%r7, n
    112 	je	L(b0)
    113 	cghi	%r7, 2
    114 	jl	L(b1)
    115 	je	L(b2)
    116 
    117 L(b3):	aghi	rp, -8
    118 	lg	%r7, 0(up)
    119 	sllg	%r9, %r7, 0(tnc)
    120 	srlg	%r11, %r7, 0(cnt)
    121 	lg	%r8, 8(up)
    122 	lg	%r7, 16(up)
    123 	sllg	%r4, %r8, 0(tnc)
    124 	srlg	%r13, %r8, 0(cnt)
    125 	ogr	%r11, %r4
    126 	la	up, 24(up)
    127 	j	L(lm3)
    128 
    129 L(b2):	aghi	rp, -16
    130 	lg	%r8, 0(up)
    131 	lg	%r7, 8(up)
    132 	sllg	%r9, %r8, 0(tnc)
    133 	srlg	%r13, %r8, 0(cnt)
    134 	la	up, 16(up)
    135 	j	L(lm2)
    136 
    137 L(b1):	aghi	rp, -24
    138 	lg	%r7, 0(up)
    139 	sllg	%r9, %r7, 0(tnc)
    140 	srlg	%r11, %r7, 0(cnt)
    141 	lg	%r8, 8(up)
    142 	lg	%r7, 16(up)
    143 	sllg	%r4, %r8, 0(tnc)
    144 	srlg	%r10, %r8, 0(cnt)
    145 	ogr	%r11, %r4
    146 	la	up, 8(up)
    147 	j	L(lm1)
    148 
    149 L(b0):	aghi	rp, -32
    150 	lg	%r8, 0(up)
    151 	lg	%r7, 8(up)
    152 	sllg	%r9, %r8, 0(tnc)
    153 	srlg	%r10, %r8, 0(cnt)
    154 	j	L(lm0)
    155 
    156 	ALIGN(8)
    157 L(top):	sllg	%r4, %r8, 0(tnc)
    158 	srlg	%r13, %r8, 0(cnt)
    159 	ogr	%r11, %r4
    160 	stg	%r10, 0(rp)
    161 L(lm3):	stg	%r11, 8(rp)
    162 L(lm2):	sllg	%r12, %r7, 0(tnc)
    163 	srlg	%r11, %r7, 0(cnt)
    164 	lg	%r8, 0(up)
    165 	lg	%r7, 8(up)
    166 	ogr	%r13, %r12
    167 	sllg	%r4, %r8, 0(tnc)
    168 	srlg	%r10, %r8, 0(cnt)
    169 	ogr	%r11, %r4
    170 	stg	%r13, 16(rp)
    171 L(lm1):	stg	%r11, 24(rp)
    172 L(lm0):	sllg	%r12, %r7, 0(tnc)
    173 	aghi	rp, 32
    174 	srlg	%r11, %r7, 0(cnt)
    175 	lg	%r8, 16(up)
    176 	lg	%r7, 24(up)
    177 	aghi	up, 32
    178 	ogr	%r10, %r12
    179 	brctg	%r0, L(top)
    180 
    181 L(end):	sllg	%r4, %r8, 0(tnc)
    182 	srlg	%r13, %r8, 0(cnt)
    183 	ogr	%r11, %r4
    184 	stg	%r10, 0(rp)
    185 	stg	%r11, 8(rp)
    186 	sllg	%r12, %r7, 0(tnc)
    187 	srlg	%r11, %r7, 0(cnt)
    188 	ogr	%r13, %r12
    189 	stg	%r13, 16(rp)
    190 	stg	%r11, 24(rp)
    191 	lgr	%r2, %r9
    192 
    193 	lmg	%r6, %r13, 48(%r15)
    194 	br	%r14
    195 EPILOGUE()
    196