// SPDX-License-Identifier: BSD-2-Clause /* * Copyright (c) 2015, Linaro Limited */ union dword { unsigned long long dw; unsigned long w[2]; }; long long __aeabi_llsl(long long a, int shift); long long __aeabi_llsl(long long a, int shift) { union dword dword = { .dw = a }; unsigned long hi = dword.w[1]; unsigned long lo = dword.w[0]; if (shift >= 32) { hi = lo << (shift - 32); lo = 0; } else if (shift > 0) { hi = (hi << shift) | (lo >> (32 - shift)); lo = lo << shift; } dword.w[1] = hi; dword.w[0] = lo; return dword.dw; } long long __aeabi_llsr(long long a, int shift); long long __aeabi_llsr(long long a, int shift) { union dword dword = { .dw = a }; unsigned long hi = dword.w[1]; unsigned long lo = dword.w[0]; if (shift >= 32) { lo = hi >> (shift - 32); hi = 0; } else if (shift > 0) { lo = (lo >> shift) | (hi << (32 - shift)); hi = hi >> shift; } dword.w[1] = hi; dword.w[0] = lo; return dword.dw; }