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