1*6463fd8fSangelo@sysam.it /* 2*6463fd8fSangelo@sysam.it * ashldi3.c extracted from gcc-2.7.2.3/libgcc2.c and 3*6463fd8fSangelo@sysam.it * gcc-2.7.2.3/longlong.h 4*6463fd8fSangelo@sysam.it * 5*6463fd8fSangelo@sysam.it * Copyright (C) 1989-2015 Free Software Foundation, Inc. 6*6463fd8fSangelo@sysam.it * 7*6463fd8fSangelo@sysam.it * SPDX-License-Identifier: GPL-2.0+ 8*6463fd8fSangelo@sysam.it */ 9*6463fd8fSangelo@sysam.it 10*6463fd8fSangelo@sysam.it #define BITS_PER_UNIT 8 11*6463fd8fSangelo@sysam.it 12*6463fd8fSangelo@sysam.it typedef int SItype __attribute__ ((mode (SI))); 13*6463fd8fSangelo@sysam.it typedef unsigned int USItype __attribute__ ((mode (SI))); 14*6463fd8fSangelo@sysam.it typedef int DItype __attribute__ ((mode (DI))); 15*6463fd8fSangelo@sysam.it typedef int word_type __attribute__ ((mode (__word__))); 16*6463fd8fSangelo@sysam.it 17*6463fd8fSangelo@sysam.it struct DIstruct {SItype high, low;}; 18*6463fd8fSangelo@sysam.it 19*6463fd8fSangelo@sysam.it typedef union 20*6463fd8fSangelo@sysam.it { 21*6463fd8fSangelo@sysam.it struct DIstruct s; 22*6463fd8fSangelo@sysam.it DItype ll; 23*6463fd8fSangelo@sysam.it } DIunion; 24*6463fd8fSangelo@sysam.it __ashldi3(DItype u,word_type b)25*6463fd8fSangelo@sysam.itDItype __ashldi3 (DItype u, word_type b) 26*6463fd8fSangelo@sysam.it { 27*6463fd8fSangelo@sysam.it DIunion w; 28*6463fd8fSangelo@sysam.it word_type bm; 29*6463fd8fSangelo@sysam.it DIunion uu; 30*6463fd8fSangelo@sysam.it 31*6463fd8fSangelo@sysam.it if (b == 0) 32*6463fd8fSangelo@sysam.it return u; 33*6463fd8fSangelo@sysam.it 34*6463fd8fSangelo@sysam.it uu.ll = u; 35*6463fd8fSangelo@sysam.it 36*6463fd8fSangelo@sysam.it bm = (sizeof (SItype) * BITS_PER_UNIT) - b; 37*6463fd8fSangelo@sysam.it if (bm <= 0) 38*6463fd8fSangelo@sysam.it { 39*6463fd8fSangelo@sysam.it w.s.low = 0; 40*6463fd8fSangelo@sysam.it w.s.high = (USItype)uu.s.low << -bm; 41*6463fd8fSangelo@sysam.it } 42*6463fd8fSangelo@sysam.it else 43*6463fd8fSangelo@sysam.it { 44*6463fd8fSangelo@sysam.it USItype carries = (USItype)uu.s.low >> bm; 45*6463fd8fSangelo@sysam.it w.s.low = (USItype)uu.s.low << b; 46*6463fd8fSangelo@sysam.it w.s.high = ((USItype)uu.s.high << b) | carries; 47*6463fd8fSangelo@sysam.it } 48*6463fd8fSangelo@sysam.it 49*6463fd8fSangelo@sysam.it return w.ll; 50*6463fd8fSangelo@sysam.it }