11394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu/* 296f1050d3df105c9ae6c6ac224f370199ea82fcdRobin Getz * Copyright 2004-2009 Analog Devices Inc. 31394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu * 496f1050d3df105c9ae6c6ac224f370199ea82fcdRobin Getz * Licensed under the GPL-2 or later. 51394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu */ 61394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu 71394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu#include "gcclib.h" 81394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu 91394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu#ifdef CONFIG_ARITHMETIC_OPS_L1 101394f03221790a988afc3e4b3cb79f2e477246a9Bryan WuDItype __ashldi3(DItype u, word_type b)__attribute__((l1_text)); 111394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu#endif 121394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu 131394f03221790a988afc3e4b3cb79f2e477246a9Bryan WuDItype __ashldi3(DItype u, word_type b) 141394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu{ 151394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu DIunion w; 161394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu word_type bm; 171394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu DIunion uu; 181394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu 191394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu if (b == 0) 201394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu return u; 211394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu 221394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu uu.ll = u; 231394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu 241394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu bm = (sizeof(SItype) * BITS_PER_UNIT) - b; 251394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu if (bm <= 0) { 261394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu w.s.low = 0; 271394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu w.s.high = (USItype) uu.s.low << -bm; 281394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu } else { 291394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu USItype carries = (USItype) uu.s.low >> bm; 301394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu w.s.low = (USItype) uu.s.low << b; 311394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu w.s.high = ((USItype) uu.s.high << b) | carries; 321394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu } 331394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu 341394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu return w.ll; 351394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu} 36