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