14d1e7918SEugeniy Paltsev/* SPDX-License-Identifier: GPL-2.0+ */ 24d1e7918SEugeniy Paltsev/* 34d1e7918SEugeniy Paltsev * ARCv2 memcpy implementation optimized for unaligned memory access using. 44d1e7918SEugeniy Paltsev * 54d1e7918SEugeniy Paltsev * Copyright (C) 2019 Synopsys 64d1e7918SEugeniy Paltsev * Author: Eugeniy Paltsev <Eugeniy.Paltsev@synopsys.com> 74d1e7918SEugeniy Paltsev */ 84d1e7918SEugeniy Paltsev 94d1e7918SEugeniy Paltsev#include <linux/linkage.h> 104d1e7918SEugeniy Paltsev 114d1e7918SEugeniy Paltsev#ifdef CONFIG_ARC_HAS_LL64 124d1e7918SEugeniy Paltsev# define LOADX(DST,RX) ldd.ab DST, [RX, 8] 134d1e7918SEugeniy Paltsev# define STOREX(SRC,RX) std.ab SRC, [RX, 8] 144d1e7918SEugeniy Paltsev# define ZOLSHFT 5 154d1e7918SEugeniy Paltsev# define ZOLAND 0x1F 164d1e7918SEugeniy Paltsev#else 174d1e7918SEugeniy Paltsev# define LOADX(DST,RX) ld.ab DST, [RX, 4] 184d1e7918SEugeniy Paltsev# define STOREX(SRC,RX) st.ab SRC, [RX, 4] 194d1e7918SEugeniy Paltsev# define ZOLSHFT 4 204d1e7918SEugeniy Paltsev# define ZOLAND 0xF 214d1e7918SEugeniy Paltsev#endif 224d1e7918SEugeniy Paltsev 234d1e7918SEugeniy PaltsevENTRY_CFI(memcpy) 244d1e7918SEugeniy Paltsev mov r3, r0 ; don;t clobber ret val 254d1e7918SEugeniy Paltsev 264d1e7918SEugeniy Paltsev lsr.f lp_count, r2, ZOLSHFT 274d1e7918SEugeniy Paltsev lpnz @.Lcopy32_64bytes 284d1e7918SEugeniy Paltsev ;; LOOP START 294d1e7918SEugeniy Paltsev LOADX (r6, r1) 304d1e7918SEugeniy Paltsev LOADX (r8, r1) 314d1e7918SEugeniy Paltsev LOADX (r10, r1) 324d1e7918SEugeniy Paltsev LOADX (r4, r1) 334d1e7918SEugeniy Paltsev STOREX (r6, r3) 344d1e7918SEugeniy Paltsev STOREX (r8, r3) 354d1e7918SEugeniy Paltsev STOREX (r10, r3) 364d1e7918SEugeniy Paltsev STOREX (r4, r3) 374d1e7918SEugeniy Paltsev.Lcopy32_64bytes: 384d1e7918SEugeniy Paltsev 394d1e7918SEugeniy Paltsev and.f lp_count, r2, ZOLAND ;Last remaining 31 bytes 404d1e7918SEugeniy Paltsev lpnz @.Lcopyremainingbytes 414d1e7918SEugeniy Paltsev ;; LOOP START 424d1e7918SEugeniy Paltsev ldb.ab r5, [r1, 1] 434d1e7918SEugeniy Paltsev stb.ab r5, [r3, 1] 444d1e7918SEugeniy Paltsev.Lcopyremainingbytes: 454d1e7918SEugeniy Paltsev 464d1e7918SEugeniy Paltsev j [blink] 474d1e7918SEugeniy PaltsevEND_CFI(memcpy) 48