Home | History | Annotate | Line # | Download | only in powerpc32
lshiftc.asm revision 1.1.1.1.8.2
      1  1.1.1.1.8.2  tls dnl  PowerPC-32 mpn_lshiftc.
      2  1.1.1.1.8.2  tls 
      3  1.1.1.1.8.2  tls dnl  Copyright 1995, 1998, 2000, 2002, 2003, 2004, 2005, 2010 Free Software
      4  1.1.1.1.8.2  tls dnl  Foundation, Inc.
      5  1.1.1.1.8.2  tls 
      6  1.1.1.1.8.2  tls dnl  This file is part of the GNU MP Library.
      7  1.1.1.1.8.2  tls 
      8  1.1.1.1.8.2  tls dnl  The GNU MP Library is free software; you can redistribute it and/or modify
      9  1.1.1.1.8.2  tls dnl  it under the terms of the GNU Lesser General Public License as published
     10  1.1.1.1.8.2  tls dnl  by the Free Software Foundation; either version 3 of the License, or (at
     11  1.1.1.1.8.2  tls dnl  your option) any later version.
     12  1.1.1.1.8.2  tls 
     13  1.1.1.1.8.2  tls dnl  The GNU MP Library is distributed in the hope that it will be useful, but
     14  1.1.1.1.8.2  tls dnl  WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
     15  1.1.1.1.8.2  tls dnl  or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
     16  1.1.1.1.8.2  tls dnl  License for more details.
     17  1.1.1.1.8.2  tls 
     18  1.1.1.1.8.2  tls dnl  You should have received a copy of the GNU Lesser General Public License
     19  1.1.1.1.8.2  tls dnl  along with the GNU MP Library.  If not, see http://www.gnu.org/licenses/.
     20  1.1.1.1.8.2  tls 
     21  1.1.1.1.8.2  tls include(`../config.m4')
     22  1.1.1.1.8.2  tls 
     23  1.1.1.1.8.2  tls C                cycles/limb
     24  1.1.1.1.8.2  tls C 603e:            ?
     25  1.1.1.1.8.2  tls C 604e:            3.0
     26  1.1.1.1.8.2  tls C 75x (G3):        3.0
     27  1.1.1.1.8.2  tls C 7400,7410 (G4):  3.0
     28  1.1.1.1.8.2  tls C 7445,7455 (G4+): 2.5
     29  1.1.1.1.8.2  tls C 7447,7457 (G4+): 2.25
     30  1.1.1.1.8.2  tls C power4/ppc970:   2.5
     31  1.1.1.1.8.2  tls C power5:          2.5
     32  1.1.1.1.8.2  tls 
     33  1.1.1.1.8.2  tls C INPUT PARAMETERS
     34  1.1.1.1.8.2  tls C rp	r3
     35  1.1.1.1.8.2  tls C up	r4
     36  1.1.1.1.8.2  tls C n	r5
     37  1.1.1.1.8.2  tls C cnt	r6
     38  1.1.1.1.8.2  tls 
     39  1.1.1.1.8.2  tls ASM_START()
     40  1.1.1.1.8.2  tls PROLOGUE(mpn_lshiftc)
     41  1.1.1.1.8.2  tls 	cmpwi	cr0, r5, 30	C more than 30 limbs?
     42  1.1.1.1.8.2  tls 	slwi	r0, r5, 2
     43  1.1.1.1.8.2  tls 	add	r4, r4, r0	C make r4 point at end of s1
     44  1.1.1.1.8.2  tls 	add	r7, r3, r0	C make r7 point at end of res
     45  1.1.1.1.8.2  tls 	bgt	L(BIG)		C branch if more than 12 limbs
     46  1.1.1.1.8.2  tls 
     47  1.1.1.1.8.2  tls 	mtctr	r5		C copy size into CTR
     48  1.1.1.1.8.2  tls 	subfic	r8, r6, 32
     49  1.1.1.1.8.2  tls 	lwzu	r11, -4(r4)	C load first s1 limb
     50  1.1.1.1.8.2  tls 	srw	r3, r11, r8	C compute function return value
     51  1.1.1.1.8.2  tls 	bdz	L(end1)
     52  1.1.1.1.8.2  tls 
     53  1.1.1.1.8.2  tls L(oop):	lwzu	r10, -4(r4)
     54  1.1.1.1.8.2  tls 	slw	r9, r11, r6
     55  1.1.1.1.8.2  tls 	srw	r12, r10, r8
     56  1.1.1.1.8.2  tls 	nor	r9, r9, r12
     57  1.1.1.1.8.2  tls 	stwu	r9, -4(r7)
     58  1.1.1.1.8.2  tls 	bdz	L(end2)
     59  1.1.1.1.8.2  tls 	lwzu	r11, -4(r4)
     60  1.1.1.1.8.2  tls 	slw	r9, r10, r6
     61  1.1.1.1.8.2  tls 	srw	r12, r11, r8
     62  1.1.1.1.8.2  tls 	nor	r9, r9, r12
     63  1.1.1.1.8.2  tls 	stwu	r9, -4(r7)
     64  1.1.1.1.8.2  tls 	bdnz	L(oop)
     65  1.1.1.1.8.2  tls 
     66  1.1.1.1.8.2  tls L(end1):
     67  1.1.1.1.8.2  tls 	slw	r0, r11, r6
     68  1.1.1.1.8.2  tls 	nor	r0, r0, r0
     69  1.1.1.1.8.2  tls 	stw	r0, -4(r7)
     70  1.1.1.1.8.2  tls 	blr
     71  1.1.1.1.8.2  tls L(end2):
     72  1.1.1.1.8.2  tls 	slw	r0, r10, r6
     73  1.1.1.1.8.2  tls 	nor	r0, r0, r0
     74  1.1.1.1.8.2  tls 	stw	r0, -4(r7)
     75  1.1.1.1.8.2  tls 	blr
     76  1.1.1.1.8.2  tls 
     77  1.1.1.1.8.2  tls L(BIG):
     78  1.1.1.1.8.2  tls 	stmw	r24, -32(r1)	C save registers we are supposed to preserve
     79  1.1.1.1.8.2  tls 	lwzu	r9, -4(r4)
     80  1.1.1.1.8.2  tls 	subfic	r8, r6, 32
     81  1.1.1.1.8.2  tls 	srw	r3, r9, r8	C compute function return value
     82  1.1.1.1.8.2  tls 	slw	r0, r9, r6
     83  1.1.1.1.8.2  tls 	addi	r5, r5, -1
     84  1.1.1.1.8.2  tls 
     85  1.1.1.1.8.2  tls 	andi.	r10, r5, 3	C count for spill loop
     86  1.1.1.1.8.2  tls 	beq	L(e)
     87  1.1.1.1.8.2  tls 	mtctr	r10
     88  1.1.1.1.8.2  tls 	lwzu	r28, -4(r4)
     89  1.1.1.1.8.2  tls 	bdz	L(xe0)
     90  1.1.1.1.8.2  tls 
     91  1.1.1.1.8.2  tls L(loop0):
     92  1.1.1.1.8.2  tls 	slw	r12, r28, r6
     93  1.1.1.1.8.2  tls 	srw	r24, r28, r8
     94  1.1.1.1.8.2  tls 	lwzu	r28, -4(r4)
     95  1.1.1.1.8.2  tls 	nor	r24, r0, r24
     96  1.1.1.1.8.2  tls 	stwu	r24, -4(r7)
     97  1.1.1.1.8.2  tls 	mr	r0, r12
     98  1.1.1.1.8.2  tls 	bdnz	L(loop0)	C taken at most once!
     99  1.1.1.1.8.2  tls 
    100  1.1.1.1.8.2  tls L(xe0):	slw	r12, r28, r6
    101  1.1.1.1.8.2  tls 	srw	r24, r28, r8
    102  1.1.1.1.8.2  tls 	nor	r24, r0, r24
    103  1.1.1.1.8.2  tls 	stwu	r24, -4(r7)
    104  1.1.1.1.8.2  tls 	mr	r0, r12
    105  1.1.1.1.8.2  tls 
    106  1.1.1.1.8.2  tls L(e):	srwi	r5, r5, 2	C count for unrolled loop
    107  1.1.1.1.8.2  tls 	addi	r5, r5, -1
    108  1.1.1.1.8.2  tls 	mtctr	r5
    109  1.1.1.1.8.2  tls 	lwz	r28, -4(r4)
    110  1.1.1.1.8.2  tls 	lwz	r29, -8(r4)
    111  1.1.1.1.8.2  tls 	lwz	r30, -12(r4)
    112  1.1.1.1.8.2  tls 	lwzu	r31, -16(r4)
    113  1.1.1.1.8.2  tls 
    114  1.1.1.1.8.2  tls L(loopU):
    115  1.1.1.1.8.2  tls 	slw	r9, r28, r6
    116  1.1.1.1.8.2  tls 	srw	r24, r28, r8
    117  1.1.1.1.8.2  tls 	lwz	r28, -4(r4)
    118  1.1.1.1.8.2  tls 	slw	r10, r29, r6
    119  1.1.1.1.8.2  tls 	srw	r25, r29, r8
    120  1.1.1.1.8.2  tls 	lwz	r29, -8(r4)
    121  1.1.1.1.8.2  tls 	slw	r11, r30, r6
    122  1.1.1.1.8.2  tls 	srw	r26, r30, r8
    123  1.1.1.1.8.2  tls 	lwz	r30, -12(r4)
    124  1.1.1.1.8.2  tls 	slw	r12, r31, r6
    125  1.1.1.1.8.2  tls 	srw	r27, r31, r8
    126  1.1.1.1.8.2  tls 	lwzu	r31, -16(r4)
    127  1.1.1.1.8.2  tls 	nor	r24, r0, r24
    128  1.1.1.1.8.2  tls 	stw	r24, -4(r7)
    129  1.1.1.1.8.2  tls 	nor	r25, r9, r25
    130  1.1.1.1.8.2  tls 	stw	r25, -8(r7)
    131  1.1.1.1.8.2  tls 	nor	r26, r10, r26
    132  1.1.1.1.8.2  tls 	stw	r26, -12(r7)
    133  1.1.1.1.8.2  tls 	nor	r27, r11, r27
    134  1.1.1.1.8.2  tls 	stwu	r27, -16(r7)
    135  1.1.1.1.8.2  tls 	mr	r0, r12
    136  1.1.1.1.8.2  tls 	bdnz	L(loopU)
    137  1.1.1.1.8.2  tls 
    138  1.1.1.1.8.2  tls 	slw	r9, r28, r6
    139  1.1.1.1.8.2  tls 	srw	r24, r28, r8
    140  1.1.1.1.8.2  tls 	slw	r10, r29, r6
    141  1.1.1.1.8.2  tls 	srw	r25, r29, r8
    142  1.1.1.1.8.2  tls 	slw	r11, r30, r6
    143  1.1.1.1.8.2  tls 	srw	r26, r30, r8
    144  1.1.1.1.8.2  tls 	slw	r12, r31, r6
    145  1.1.1.1.8.2  tls 	srw	r27, r31, r8
    146  1.1.1.1.8.2  tls 	nor	r24, r0, r24
    147  1.1.1.1.8.2  tls 	stw	r24, -4(r7)
    148  1.1.1.1.8.2  tls 	nor	r25, r9, r25
    149  1.1.1.1.8.2  tls 	stw	r25, -8(r7)
    150  1.1.1.1.8.2  tls 	nor	r26, r10, r26
    151  1.1.1.1.8.2  tls 	stw	r26, -12(r7)
    152  1.1.1.1.8.2  tls 	nor	r27, r11, r27
    153  1.1.1.1.8.2  tls 	stw	r27, -16(r7)
    154  1.1.1.1.8.2  tls 	nor	r12, r12, r12
    155  1.1.1.1.8.2  tls 	stw	r12, -20(r7)
    156  1.1.1.1.8.2  tls 	lmw	r24, -32(r1)	C restore registers
    157  1.1.1.1.8.2  tls 	blr
    158  1.1.1.1.8.2  tls EPILOGUE()
    159