Update.
[glibc.git] / sysdeps / mips / lshift.S
bloba163559c03e121d5f1f35aa2f47631c6697468da
1 /* MIPS2 __mpn_lshift --
3 Copyright (C) 1995, 2000 Free Software Foundation, Inc.
5 This file is part of the GNU MP Library.
7 The GNU MP Library is free software; you can redistribute it and/or modify
8 it under the terms of the GNU Library General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or (at your
10 option) any later version.
12 The GNU MP Library is distributed in the hope that it will be useful, but
13 WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
14 or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Library General Public
15 License for more details.
17 You should have received a copy of the GNU Library General Public License
18 along with the GNU MP Library; see the file COPYING.LIB.  If not, write to
19 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
20 MA 02111-1307, USA.  */
22 #include <sysdep.h>
24 /* INPUT PARAMETERS
25    res_ptr      $4
26    src_ptr      $5
27    size         $6
28    cnt          $7
30 #ifdef __PIC__
31         .option pic2
32 #endif
33 ENTRY (__mpn_lshift)
34         .set    noreorder
35 #ifdef __PIC__
36         .cpload t9
37 #endif
38         .set    nomacro
40         sll     $2,$6,2
41         addu    $5,$5,$2        /* make r5 point at end of src */
42         lw      $10,-4($5)      /* load first limb */
43         subu    $13,$0,$7
44         addu    $4,$4,$2        /* make r4 point at end of res */
45         addiu   $6,$6,-1
46         and     $9,$6,4-1       /* number of limbs in first loop */
47         beq     $9,$0,.L0       /* if multiple of 4 limbs, skip first loop */
48          srl    $2,$10,$13      /* compute function result */
50         subu    $6,$6,$9
52 .Loop0: lw      $3,-8($5)
53         addiu   $4,$4,-4
54         addiu   $5,$5,-4
55         addiu   $9,$9,-1
56         sll     $11,$10,$7
57         srl     $12,$3,$13
58         move    $10,$3
59         or      $8,$11,$12
60         bne     $9,$0,.Loop0
61          sw     $8,0($4)
63 .L0:    beq     $6,$0,.Lend
64          nop
66 .Loop:  lw      $3,-8($5)
67         addiu   $4,$4,-16
68         addiu   $6,$6,-4
69         sll     $11,$10,$7
70         srl     $12,$3,$13
72         lw      $10,-12($5)
73         sll     $14,$3,$7
74         or      $8,$11,$12
75         sw      $8,12($4)
76         srl     $9,$10,$13
78         lw      $3,-16($5)
79         sll     $11,$10,$7
80         or      $8,$14,$9
81         sw      $8,8($4)
82         srl     $12,$3,$13
84         lw      $10,-20($5)
85         sll     $14,$3,$7
86         or      $8,$11,$12
87         sw      $8,4($4)
88         srl     $9,$10,$13
90         addiu   $5,$5,-16
91         or      $8,$14,$9
92         bgtz    $6,.Loop
93          sw     $8,0($4)
95 .Lend:  sll     $8,$10,$7
96         j       $31
97         sw      $8,-4($4)
98         END (__mpn_lshift)