linux/arch/mn10300/lib/__lshrdi3.S
<<
>>
Prefs
   1/* MN10300 64-bit logical right shift
   2 *
   3 * Copyright (C) 2007 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 Licence
   8 * as published by the Free Software Foundation; either version
   9 * 2 of the Licence, or (at your option) any later version.
  10 */
  11
  12#include <asm/cache.h>
  13
  14        .text
  15        .balign L1_CACHE_BYTES
  16
  17###############################################################################
  18#
  19# unsigned long long __lshrdi3(unsigned long long value [D1:D0],
  20#                              unsigned by [(12,SP)])
  21#
  22###############################################################################
  23        .globl  __lshrdi3
  24        .type   __lshrdi3,@function
  25__lshrdi3:
  26        mov     (12,sp),a0
  27        and     +63,a0
  28        beq     __lshrdi3_zero
  29
  30        cmp     +31,a0
  31        bhi     __lshrdi3_32plus
  32
  33        # the count is in the range 1-31
  34        lsr     a0,d0
  35
  36        mov     +32,a1
  37        sub     a0,a1,a1                        # a1 = 32 - count
  38        asl     a1,d1,a1                        # get underflow from MSW -> LSW
  39
  40        or_lsr  a1,d0,a0,d1                     # insert underflow into LSW and
  41                                                # shift the MSW
  42        rets
  43
  44        .balign L1_CACHE_BYTES
  45        # the count is in the range 32-63
  46__lshrdi3_32plus:
  47        lsr     a0,d1,d0
  48        clr     d1
  49__lshrdi3_zero:
  50        rets
  51
  52        .size   __lshrdi3, .-__lshrdi3
  53
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.