1b920de1b77b72ca9432ac3f97edb26541e65e5ddDavid Howells/* MN10300 64-bit logical right shift 2b920de1b77b72ca9432ac3f97edb26541e65e5ddDavid Howells * 3b920de1b77b72ca9432ac3f97edb26541e65e5ddDavid Howells * Copyright (C) 2007 Red Hat, Inc. All Rights Reserved. 4b920de1b77b72ca9432ac3f97edb26541e65e5ddDavid Howells * Written by David Howells (dhowells@redhat.com) 5b920de1b77b72ca9432ac3f97edb26541e65e5ddDavid Howells * 6b920de1b77b72ca9432ac3f97edb26541e65e5ddDavid Howells * This program is free software; you can redistribute it and/or 7b920de1b77b72ca9432ac3f97edb26541e65e5ddDavid Howells * modify it under the terms of the GNU General Public Licence 8b920de1b77b72ca9432ac3f97edb26541e65e5ddDavid Howells * as published by the Free Software Foundation; either version 9b920de1b77b72ca9432ac3f97edb26541e65e5ddDavid Howells * 2 of the Licence, or (at your option) any later version. 10b920de1b77b72ca9432ac3f97edb26541e65e5ddDavid Howells */ 11b920de1b77b72ca9432ac3f97edb26541e65e5ddDavid Howells 12b920de1b77b72ca9432ac3f97edb26541e65e5ddDavid Howells#include <asm/cache.h> 13b920de1b77b72ca9432ac3f97edb26541e65e5ddDavid Howells 14b920de1b77b72ca9432ac3f97edb26541e65e5ddDavid Howells .text 15b920de1b77b72ca9432ac3f97edb26541e65e5ddDavid Howells .balign L1_CACHE_BYTES 16b920de1b77b72ca9432ac3f97edb26541e65e5ddDavid Howells 17b920de1b77b72ca9432ac3f97edb26541e65e5ddDavid Howells############################################################################### 18b920de1b77b72ca9432ac3f97edb26541e65e5ddDavid Howells# 19b920de1b77b72ca9432ac3f97edb26541e65e5ddDavid Howells# unsigned long long __lshrdi3(unsigned long long value [D1:D0], 20b920de1b77b72ca9432ac3f97edb26541e65e5ddDavid Howells# unsigned by [(12,SP)]) 21b920de1b77b72ca9432ac3f97edb26541e65e5ddDavid Howells# 22b920de1b77b72ca9432ac3f97edb26541e65e5ddDavid Howells############################################################################### 23b920de1b77b72ca9432ac3f97edb26541e65e5ddDavid Howells .globl __lshrdi3 24b920de1b77b72ca9432ac3f97edb26541e65e5ddDavid Howells .type __lshrdi3,@function 25b920de1b77b72ca9432ac3f97edb26541e65e5ddDavid Howells__lshrdi3: 26b920de1b77b72ca9432ac3f97edb26541e65e5ddDavid Howells mov (12,sp),a0 27b920de1b77b72ca9432ac3f97edb26541e65e5ddDavid Howells and +63,a0 28b920de1b77b72ca9432ac3f97edb26541e65e5ddDavid Howells beq __lshrdi3_zero 29b920de1b77b72ca9432ac3f97edb26541e65e5ddDavid Howells 30b920de1b77b72ca9432ac3f97edb26541e65e5ddDavid Howells cmp +31,a0 31b920de1b77b72ca9432ac3f97edb26541e65e5ddDavid Howells bhi __lshrdi3_32plus 32b920de1b77b72ca9432ac3f97edb26541e65e5ddDavid Howells 33b920de1b77b72ca9432ac3f97edb26541e65e5ddDavid Howells # the count is in the range 1-31 34b920de1b77b72ca9432ac3f97edb26541e65e5ddDavid Howells lsr a0,d0 35b920de1b77b72ca9432ac3f97edb26541e65e5ddDavid Howells 36b920de1b77b72ca9432ac3f97edb26541e65e5ddDavid Howells mov +32,a1 37b920de1b77b72ca9432ac3f97edb26541e65e5ddDavid Howells sub a0,a1,a1 # a1 = 32 - count 38b920de1b77b72ca9432ac3f97edb26541e65e5ddDavid Howells asl a1,d1,a1 # get underflow from MSW -> LSW 39b920de1b77b72ca9432ac3f97edb26541e65e5ddDavid Howells 40b920de1b77b72ca9432ac3f97edb26541e65e5ddDavid Howells or_lsr a1,d0,a0,d1 # insert underflow into LSW and 41b920de1b77b72ca9432ac3f97edb26541e65e5ddDavid Howells # shift the MSW 42b920de1b77b72ca9432ac3f97edb26541e65e5ddDavid Howells rets 43b920de1b77b72ca9432ac3f97edb26541e65e5ddDavid Howells 44b920de1b77b72ca9432ac3f97edb26541e65e5ddDavid Howells .balign L1_CACHE_BYTES 45b920de1b77b72ca9432ac3f97edb26541e65e5ddDavid Howells # the count is in the range 32-63 46b920de1b77b72ca9432ac3f97edb26541e65e5ddDavid Howells__lshrdi3_32plus: 47b920de1b77b72ca9432ac3f97edb26541e65e5ddDavid Howells lsr a0,d1,d0 48b920de1b77b72ca9432ac3f97edb26541e65e5ddDavid Howells clr d1 49b920de1b77b72ca9432ac3f97edb26541e65e5ddDavid Howells__lshrdi3_zero: 50b920de1b77b72ca9432ac3f97edb26541e65e5ddDavid Howells rets 51b920de1b77b72ca9432ac3f97edb26541e65e5ddDavid Howells 52b920de1b77b72ca9432ac3f97edb26541e65e5ddDavid Howells .size __lshrdi3, .-__lshrdi3 53