/* MN10300 64-bit arithmetic left shift1*2* Copyright (C) 2007 Red Hat, Inc. All Rights Reserved.3* Written by David Howells ([email protected])4*5* This program is free software; you can redistribute it and/or6* modify it under the terms of the GNU General Public Licence7* as published by the Free Software Foundation; either version8* 2 of the Licence, or (at your option) any later version.9*/10#include <asm/cache.h>1112.text13.balign L1_CACHE_BYTES1415###############################################################################16#17# unsigned long long __ashldi3(unsigned long long value [D1:D0],18# unsigned by [(12,SP)])19#20###############################################################################21.globl __ashldi322.type __ashldi3,@function23__ashldi3:24mov (12,sp),a025and +63,a026beq __ashldi3_zero2728cmp +31,a029bhi __ashldi3_32plus3031# the count is in the range 1-3132asl a0,d13334mov +32,a135sub a0,a1,a1 # a1 = 32 - count36lsr a1,d0,a1 # get overflow from LSW -> MSW3738or_asl a1,d1,a0,d0 # insert overflow into MSW and39# shift the LSW40rets4142.balign L1_CACHE_BYTES43# the count is in the range 32-6344__ashldi3_32plus:45asl a0,d0,d146clr d047__ashldi3_zero:48rets4950.size __ashldi3, .-__ashldi3515253