blob: cfa5607c5b0dfbfa306a2498196692d27c208978 [file] [log] [blame]
Tom Rini10e47792018-05-06 17:58:06 -04001/* SPDX-License-Identifier: GPL-2.0+ */
Heiko Schocher8ffa25f2009-07-23 13:27:04 +02002/* Copyright 1995, 1996, 1998, 1999, 2000, 2003, 2004, 2005
3 Free Software Foundation, Inc.
Wolfgang Denkd79de1d2013-07-08 09:37:19 +02004 */
Heiko Schocher8ffa25f2009-07-23 13:27:04 +02005
Simon Glassba4d90a2015-06-02 11:08:20 -06006#include <linux/linkage.h>
Marek Vasutc480fe72016-05-26 18:01:39 +02007#include <asm/assembler.h>
Simon Glassba4d90a2015-06-02 11:08:20 -06008
Heiko Schocher8ffa25f2009-07-23 13:27:04 +02009#ifdef __ARMEB__
10#define al r1
11#define ah r0
12#else
13#define al r0
14#define ah r1
15#endif
16
Stephen Warren14d74b02016-06-03 13:05:11 -060017.pushsection .text.__lshldi3, "ax"
Marek Vasutc480fe72016-05-26 18:01:39 +020018ENTRY(__lshrdi3)
Simon Glassba4d90a2015-06-02 11:08:20 -060019ENTRY(__aeabi_llsr)
Heiko Schocher8ffa25f2009-07-23 13:27:04 +020020
21 subs r3, r2, #32
22 rsb ip, r2, #32
23 movmi al, al, lsr r2
24 movpl al, ah, lsr r3
Marek Vasutc480fe72016-05-26 18:01:39 +020025 ARM( orrmi al, al, ah, lsl ip )
26 THUMB( lslmi r3, ah, ip )
27 THUMB( orrmi al, al, r3 )
Heiko Schocher8ffa25f2009-07-23 13:27:04 +020028 mov ah, ah, lsr r2
Marek Vasutc480fe72016-05-26 18:01:39 +020029 ret lr
30
31ENDPROC(__lshrdi3)
Simon Glassba4d90a2015-06-02 11:08:20 -060032ENDPROC(__aeabi_llsr)
Stephen Warren14d74b02016-06-03 13:05:11 -060033.popsection