~ubuntu-branches/ubuntu/precise/linux-lowlatency/precise

« back to all changes in this revision

Viewing changes to arch/frv/lib/__lshrdi3.S

  • Committer: Package Import Robot
  • Author(s): Alessio Igor Bogani
  • Date: 2011-10-26 11:13:05 UTC
  • Revision ID: package-import@ubuntu.com-20111026111305-tz023xykf0i6eosh
Tags: upstream-3.2.0
ImportĀ upstreamĀ versionĀ 3.2.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* __lshrdi3.S: 64-bit logical shift right
 
2
 *
 
3
 * Copyright (C) 2003 Red Hat, Inc. All Rights Reserved.
 
4
 * Written by David Howells (dhowells@redhat.com)
 
5
 *
 
6
 * This program is free software; you can redistribute it and/or
 
7
 * modify it under the terms of the GNU General Public License
 
8
 * as published by the Free Software Foundation; either version
 
9
 * 2 of the License, or (at your option) any later version.
 
10
 */
 
11
 
 
12
        .text
 
13
        .p2align        4
 
14
 
 
15
###############################################################################
 
16
#
 
17
# unsigned long long __lshrdi3(unsigned long long value [GR8:GR9], unsigned by [GR10])
 
18
#
 
19
###############################################################################
 
20
        .globl          __lshrdi3
 
21
        .type           __lshrdi3,@function
 
22
__lshrdi3:
 
23
        andicc.p        gr10,#63,gr10,icc0
 
24
        setlos          #32,gr5
 
25
        andicc.p        gr10,#32,gr0,icc1
 
26
        beqlr           icc0,#0
 
27
        ckeq            icc1,cc4                        ; cc4 is true if 0<N<32
 
28
 
 
29
        # deal with a shift in the range 1<=N<=31
 
30
        csrl.p          gr9,gr10,gr9    ,cc4,#1         ; LSW >>= N
 
31
        csub            gr5,gr10,gr5    ,cc4,#1         ; M = 32 - N
 
32
        csll.p          gr8,gr5,gr4     ,cc4,#1
 
33
        csrl            gr8,gr10,gr8    ,cc4,#1         ; MSW >>= N
 
34
        cor.p           gr4,gr9,gr9     ,cc4,#1         ; LSW |= MSW << M
 
35
 
 
36
        # deal with a shift in the range 32<=N<=63
 
37
        csrl            gr8,gr10,gr9    ,cc4,#0         ; LSW = MSW >> (N & 31 [implicit AND])
 
38
        cor.p           gr0,gr0,gr8     ,cc4,#0         ; MSW = 0
 
39
        bralr
 
40
        .size           __lshrdi3, .-__lshrdi3